Node.js黑马时钟案例

先上没有使用node.js之前的html部分代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        html,
        body {
            height: 100%;
            overflow: hidden;
            background-image: linear-gradient(to bottom right, red, yellow);
        }
        .box,
        .box1 {
            position: absolute;
            left: 50%;
            margin-left: -300px;
            margin-top: 0px;
            display: flex;
            justify-content: space-around;
            align-items: center;
            width: 600px;
            height: 400px;
            background-color: rgba(0, 0, 0, 0.2);
            font-size: 80px;
        }
        .box1 {
            transform: translateY(400px) rotate(180deg);
            background-color: rgba(255, 255, 255, 0.2);
        }
    </style>
</head>
<body>
    <!-- 最大的盒子 -->
    <div class="boss">
        <!-- 时分秒 -->
        <div class="box">
            <div class="hours">00</div>
            <div>:</div>
            <div class="minutes">00</div>
            <div>:</div>
            <div class="second">00</div>
        </div>
    </div>
</body>
<script>
    // 页面加载事件
    window.addEventListener("load", function () {
        // 获取box
        let box = document.querySelector(".box")
        // 获取boss
        let boss = document.querySelector(".boss")
        // 克隆box
        let divs = box.cloneNode(true)
        divs.className = "box1"
        boss.appendChild(divs)
        // 获取时分秒元素标签
        let times = document.querySelectorAll(".box > div")
        let times1 = document.querySelectorAll(".box1 > div")
        console.log(times1);
        function timer() {
            // 获取时分秒
            let nowDate = new Date()
            // 时
            let hours = nowDate.getHours()
            // 分
            let minutes = nowDate.getMinutes()
            // 秒
            let second = nowDate.getSeconds()
            // 添加到页面
            times[0].innerHTML = zero(hours)
            times[2].innerHTML = zero(minutes)
            times[4].innerHTML = zero(second)
            times1[0].innerHTML = zero(hours)
            times1[2].innerHTML = zero(minutes)
            times1[4].innerHTML = zero(second)
        }
        setInterval(timer, 1000)
        //补零
        function zero(n) {
            return n > 9 ? n : "0" + n
        }
    })
</script>
</html>

效果如下图所示:

在这里插入图片描述
我们的需求是什么?
使用nodejs创建文件

1.index.css
2.index.js
我们需要把style与script中的内容分别写入到这两个文件当中,然后替换掉html当中的style与script标签,替换为外链的方式

详细介绍实现过程,介绍在代码注释当中,请看代码:

// 引入fs模块
const fs = require("fs")
// 引入path模块
const path = require("path")
// 正则匹配
// 正则匹配style标签
// 需要使用\分离
// s表示空白字符 S表示非空白字符 *表示匹配所有
const regStyle = /<style>[\s\S]*<\/style>/
// 正则匹配script标签
const regScript = /<script>[\s\S]*<\/script>/
// 读取html部分
fs.readFile(path.join(__dirname,"./index.html"),"utf8",(err,data)=>{
    if(err) {
        // 读取失败打印错误信息
        return console.log(err.message)
    }
    // 读取成功调用函数
    resolveStyle(data)
    resolveScript(data)
    resolveHtml(data)
})
// // 处理style部分的函数
function resolveStyle(value){
    // 使用exec方法去查找 查找到返回一个数组 没查找到返回null
    const r = regStyle.exec(value)
    // 返回数组选中下标0
    // 做替换操作 我们需要把style标签去掉 所以替换为""
    const newStyle = r[0].replace("<style>","").replace("</style>","")
    // 我们需要使用writeFile的方法创建一个 .css的文件 然后把处理好的r[0]的内容写入进去
    fs.writeFile(path.join(__dirname,"index.css"),newStyle,"utf8",err=>{
        if(err){
            return err.message
        }
        console.log("成功")
    })
}
function resolveScript(value){
    // 使用exec方法去查找 查找到返回一个数组 没查找到返回null
    const r = regScript.exec(value)
    // 返回数组选中下标0
    // 做替换操作 我们需要把script标签去掉 所以替换为""
    const newScript = r[0].replace("<script>","").replace("</script>","")
    // 我们需要使用writeFile的方法创建一个 .js的文件 然后把处理好的r[0]的内容写入进去
    fs.writeFile(path.join(__dirname,"index.js"),newScript,"utf8",err=>{
        if(err){
            return err.message
        }
        console.log("成功")
    })
}
// 最后我们需要操作html当中的标签内容 更改为外链的方法写入
function resolveHtml(value){
    // 处理style标签与script标签 外链进html文件中
    const newHtml = value.replace(regStyle,'<link rel="stylesheet" href="./index.css">').replace(
        regScript,'<script src="./index.js"></script>'
    )
    // 我们把我们处理好的newHtml写入到旧的html当中
    fs.writeFile(path.join(__dirname,"index.html"),newHtml,"utf8",err=>{
        if(err){
            return err.message
        }
    })
}

当我们在终端运行之后:

在这里插入图片描述

文件被创建出来了,内容也分别添加进到了文件当中
我们来看看index.html部分

在这里插入图片描述

看看效果是否还是原来的样子:
在这里插入图片描述

感谢大家的阅读,如有不对的地方,可以向我提出,感谢大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/250066.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

猿人学简单题分析(js逆向)

猿人学15T&#xff0c;实际带着大家分析一下。 开发者工具进行抓包&#xff0c;然后找的参数类型 由于这里的加密参数是m搜索出来的肯定是很多的&#xff0c;所以直接上XHR断点进行快速定位。 直接调用堆栈开始向上找。 控制台输出这个window.m查看这个函数的位置。 找到直接扣…

git安装和配置

git安装和配置 一、软件介绍 Git是一个免费开源的分布式版本控制系统&#xff0c;旨在快速高效地处理从小型到大型项目的所有内容。 Git易于学习&#xff0c;占地面积小&#xff0c;性能闪电般快。它以廉价的本地分支、方便的暂存区域和多个工作流等功能胜过了Subversion、C…

golang反射(reflect)虽爽,但很贵

标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码&#xff0c;提高开发效率。 但是使用反射势必会多出大量的操作指令&#xff0c;导致性能下降 案例 字段赋值方式对比 type Student struct {Name string…

1.electron之纯原生js/jquery的桌面应用程序(基础篇)

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

灾备建设中,虚拟机异构平台恢复技术原理与应用

在如今混合云环境下&#xff0c;实现异构虚拟化恢复与迁移面临着极大挑战。不同于市面上有代理的恢复方案&#xff0c;虚拟机无代理跨平台恢复解决方案利用自主研发的转换引擎&#xff08;VMCE&#xff09;对已备份虚拟机文件进行高效的存储格式转换和配置信息转换&#xff0c;…

基于java 的经济开发区管理系统设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于java 的经济开发区管…

基于Springboot的教学信息反馈系统的设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Springboot的教学信…

如何进行Feign的自定义配置

Feign可以支持很多的自定义配置&#xff0c;下列是部分配置信息 类型作用说明Logger.Level修改日志级别配置键&#xff1a;loggerLevel&#xff0c;包含四种不同的级别&#xff1a;NONE、BASIC、HEADERS、FULLClass<Retryer>失败重试机制配置键&#xff1a;retryer&#…

dcoker-compose一键部署EFAK —— 筑梦之路

简介 EFAK&#xff08;Eagle For Apache Kafka&#xff0c;以前称为 Kafka Eagle&#xff09;是一款由国内公司开源的Kafka集群监控系统&#xff0c;可以用来监视kafka集群的broker状态、Topic信息、IO、内存、consumer线程、偏移量等信息&#xff0c;并进行可视化图表展示。独…

stm32H库的内部FLASH读写操作与结构体数组数据写入与读取

stm32H库的内部FLASH读写操作与结构体数组数据写入与读取 1.软硬件准备2.关于STM32的Flash的一些说明3.实验结果 参考博主-STM32系列(HAL库)——内部FLASH读写实验 1.软硬件准备 软件&#xff1a;CubeMX、SSCOM&#xff08;串口调试助手&#xff09; 硬件&#xff1a;SMT32F…

如何查看KylinOS银河麒麟操作系统版本?

如何查看KylinOS银河麒麟操作系统版本? 当前银河银河麒麟高级服务器操作系统V10发行版如下&#xff1a; (Tercel) 版本是 银河麒麟 V10 SP1 版本(Sword) 版本是 银河麒麟 V10 SP2 版本(Lance) 版本是 银河麒麟 V10 SP3 版本我们可使用如下三种方式&#xff08;命令&#xff0…

【C++11特性篇】利用 { } 初始化(1)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.回顾C98标准中{}的使用二.一切皆可用…

前端路由钩子的神奇之处:你真的了解它们吗?(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

QT实现四则运算计算器

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setMaximumSize(240,300);this->setMinimumSize(240,300);this->setWindowTitle("计算器&…

大模型算法工程师的面试题来了(附答案)

自 ChatGPT 在去年 11 月底横空出世&#xff0c;大模型的风刮了整一年。 历经了百模大战、Llama 2 开源、GPTs 发布等一系列里程碑事件&#xff0c;将大模型技术推至无可争议的 C 位。基于大模型的研究与讨论&#xff0c;也让我们愈发接近这波技术浪潮的核心。 最近大模型相关…

Stable Diffusion 微调及推理优化实践指南

随着 Stable Diffsuion 的迅速走红&#xff0c;引发了 AI 绘图的时代变革。然而对于大部分人来说&#xff0c;训练扩散模型的门槛太高&#xff0c;对 Stable Diffusion 进行全量微调也很难入手。由此&#xff0c;社区催生了一系列针对 Stable Diffusion 的高效微调方案&#xf…

动态规划习题

动态规划的核心思想是利用子问题的解来构建整个问题的解。为此&#xff0c;我们通常使用一个表格或数组来存储子问题的解&#xff0c;以便在需要时进行查找和使用。 1.最大字段和 #include <iostream> using namespace std; #define M 200000int main() {int n, a[M], d…

磁盘及文件系统(上)

这次博客我们将重点理解Ext2文件系统。 首先我们要理解什么是文件系统。 在之前我们一直理解的文件都是一个被打开的文件&#xff0c;而os为了能够管理这样的文件创建了struct_file这样的结构体对象在内核中描述被打开的文件&#xff0c;这个结构体对象中包含了被打开文件的基…

C# OpenVINO 直接读取百度模型实现图片旋转角度检测

目录 效果 模型信息 代码 下载 C# OpenVINO 直接读取百度模型实现图片旋转角度检测 效果 模型信息 Inputs ------------------------- name&#xff1a;x tensor&#xff1a;F32[?, 3, 224, 224] --------------------------------------------------------------- Ou…

拖地用什么拖把拖最干净 手持洗地机好用吗?据说拖地又亮又干净?

拖地用什么拖把拖最干净 手持洗地机好用吗&#xff1f;据说拖地又亮又干净&#xff1f; 拖地用什么拖干净&#xff1f;在拖地时&#xff0c;选择合适的拖把和清洁剂非常重要。常见的拖把类型包括胶棉拖把和平板拖把。胶棉拖把易于清洁&#xff0c;适用于硬地板和短毛地毯&#…