Node.js 创建可二次编辑的 HTML 文档并生成文件

Node.js 环境 中直接用浏览器的 document 对象会报错(Node 没有原生 DOM),所以需要用 jsdom 库模拟浏览器 DOM,实现你要的:

  1. document.implementation.createHTMLDocument 创建 HTML 文档
  2. 支持二次编辑(增删改元素、样式、文本)
  3. 生成真实可运行的 HTML 文件

一、核心步骤

  1. 安装 jsdom(Node 模拟 DOM 的标准库)
  2. createHTMLDocument 创建空白 HTML 文档
  3. 二次编辑 DOM(添加标题、内容、样式、脚本等)
  4. 导出完整 HTML 字符串并写入本地文件

二、完整可直接运行代码

1. 先初始化项目 + 安装依赖

打开终端,执行:

复制代码
# 初始化项目(一路回车)
npm init -y
# 安装 jsdom 核心依赖
npm install jsdom

2. 完整代码(create-edit-html.js)

复制代码
// 1. 引入 jsdom 库(Node 环境模拟浏览器 DOM)
const { JSDOM } = require('jsdom');
// 引入 Node 原生文件模块(用于写入 HTML 文件)
const fs = require('fs');
const path = require('path');

// 2. 创建 JSDOM 实例,获取 document 对象
const dom = new JSDOM('<!DOCTYPE html>');
const document = dom.window.document;

// ====================== 核心:创建 HTML 文档 ======================
// 完全使用你要求的语法:createHTMLDocument
const newDoc = document.implementation.createHTMLDocument('我的可编辑 HTML 文档');
console.log('✅ 初始 HTML 文档创建成功');

// ====================== 二次编辑 DOM(核心功能) ======================
// 1. 编辑标题
newDoc.title = '二次编辑后的标题';

// 2. 获取 body 元素,添加内容
const body = newDoc.body;
body.style.backgroundColor = '#f5f5f5'; // 编辑样式

// 3. 创建并添加标题元素
const h1 = newDoc.createElement('h1');
h1.textContent = 'Node.js 生成 · 支持二次编辑';
h1.style.color = '#2d8cf0';
body.appendChild(h1);

// 4. 创建并添加段落
const p = newDoc.createElement('p');
p.textContent = '这个 HTML 文档完全由 Node 生成,支持任意 DOM 操作';
p.style.fontSize = '16px';
body.appendChild(p);

// 5. 动态添加脚本(可编辑任何内容)
const script = newDoc.createElement('script');
script.textContent = `console.log('这是 Node 生成的 HTML 脚本');alert('打开页面成功!');`;
body.appendChild(script);

// ====================== 生成真实 HTML 文件 ======================
// 1. 将 DOM 文档转为完整 HTML 字符串(包含 doctype、html、head、body)
const finalHtml = `<!DOCTYPE html>${newDoc.documentElement.outerHTML}`;

// 2. 定义输出文件路径
const outputPath = path.join(__dirname, 'edited-html.html');

// 3. 写入本地文件
fs.writeFile(outputPath, finalHtml, 'utf8', (err) => {
  if (err) {
    console.error('❌ 写入文件失败:', err);
    return;
  }
  console.log('✅ HTML 文件生成成功!路径:', outputPath);
  console.log('📝 支持二次编辑:可继续修改 newDoc 对象后重新生成');
});

三、关键功能说明

1. 为什么用 jsdom

  • Node.js 没有浏览器的 documentwindow 原生对象
  • jsdom 是官方推荐的 DOM 模拟库,完美支持 document.implementation.createHTMLDocument

2. 完全使用你要求的语法

复制代码
// 就是你要的这行代码,无修改
const newDoc = document.implementation.createHTMLDocument('新文档');

3. 真正的「二次编辑」

newDoc标准 DOM 文档对象,支持所有浏览器 DOM 操作:

复制代码
// 二次编辑示例(直接加在代码里即可)
// 新增按钮
const btn = newDoc.createElement('button');
btn.textContent = '点击我';
btn.onclick = function() { alert('二次编辑的按钮'); };
newDoc.body.appendChild(btn);

// 修改已有元素
h1.textContent = '修改后的标题';
// 删除元素
// newDoc.body.removeChild(p);

4. 生成「真正的 HTML 文件」

  • 最终输出的 edited-html.html标准可直接打开的 HTML 文件

  • 双击就能在浏览器运行,包含完整结构:

    复制代码
    <!DOCTYPE html>
    <html>
      <head><title>二次编辑后的标题</title></head>
      <body style="background-color:#f5f5f5">
        <h1 style="color:#2d8cf0">Node.js 生成 · 支持二次编辑</h1>
        ...
      </body>
    </html>

四、运行代码

终端执行:

复制代码
node create-edit-html.js

运行后会在当前文件夹生成 edited-html.html,双击打开即可使用。

五、扩展:多次编辑 + 多次生成

如果需要多次修改、多次生成文件,直接封装成函数:

复制代码
// 封装:生成文件函数
function saveHtml(doc, filename) {
  const html = `<!DOCTYPE html>${doc.documentElement.outerHTML}`;
  fs.writeFileSync(path.join(__dirname, filename), html, 'utf8');
}

// 第一次编辑 + 生成
saveHtml(newDoc, 'v1.html');

// 二次编辑
const div = newDoc.createElement('div');
div.textContent = '第二次编辑的内容';
newDoc.body.appendChild(div);

// 重新生成
saveHtml(newDoc, 'v2.html');

总结

  1. Node 环境必须用 jsdom 模拟 DOM,才能使用 createHTMLDocument
  2. newDoc 是标准 DOM 对象,支持所有浏览器 DOM 二次编辑操作
  3. 最终通过 fs 模块写入文件,生成可直接运行的真实 HTML
  4. 代码可直接复制运行,无其他依赖,轻量稳定
相关推荐
前端之虎陈随易1 小时前
2年没用Nodejs了,Bun很香
linux·前端·javascript·vue.js·typescript
无限进步_2 小时前
二叉搜索树完全解析:从概念到实现与应用场景
c语言·开发语言·数据结构·c++·算法·github·visual studio
努力努力再努力FFF2 小时前
别再乱学PS、Python了,普通大学生该看懂的技能趋势
开发语言·python
好运的阿财2 小时前
OpenClaw工具拆解之host_workspace_write+host_workspace_edit
前端·javascript·人工智能·机器学习·ai编程·openclaw·openclaw工具
天若有情6732 小时前
逆向玩家狂喜!用C++野生写法一键破解线性加密(不规范但巨好用)
开发语言·c++·算法
XiYang-DING2 小时前
JavaScript
开发语言·javascript·ecmascript
skywalk81632 小时前
代码高尔夫(Code Golf)是一种以“用最少的字符数实现特定功能”为核心目标的编程挑战或风格。
开发语言
xyq20242 小时前
MySQL 安装配置
开发语言
鸽子一号2 小时前
c#Modbus通信
开发语言·c#
念何架构之路3 小时前
Go Socket编程
开发语言·后端·golang