Node.js - 如何编辑jsdom窗口中的元素并将窗口另存为新的HTML文件?

Eva*_*Eva 10 html javascript jquery node.js jsdom

我想加载一个HTML文件(使用fs.read),使用jsdom加载DOM,然后更改正文节点的文本(通过jquery).然后我想将编辑后的DOM窗口保存为HTML文件.有没有办法做到这一点?我使用的代码如下:

fs.readFile(file, 'utf8', function(error, data) {
    jsdom.env(data, [], function (errors, window) {
        var $ = require('jquery')(window);
        $(document.body.getElementsByTagName("*")).each(function () {
            var content = $(this).text();
            var word = "\\b"+wordSuggestions.word+"\\b";
            var re = new RegExp(word, "g");
            content = content.replace(re, wordSuggestions.suggestion);
            $(this).text(content);
        });

        fs.writeFile(file, data, function (error){ // saving the new HTML file? What should I put instead of data? Window?
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

Lou*_*uis 12

这是一个如何做到这一点的例子.我已经将它建立在您的代码上,但是对它进行了简化,以便我可以执行代码并说明如何执行它.以下代码读取foo.html并将文本添加modified!到所有p元素,然后将其写入out.html.你缺少的主要是window.document.documentElement.outerHTML.

var jsdom = require("jsdom");
var fs = require("fs");

fs.readFile('foo.html', 'utf8', function(error, data) {
    jsdom.env(data, [], function (errors, window) {
        var $ = require('jquery')(window);
        $("p").each(function () {
            var content = $(this).text();
            $(this).text(content + " modified!");
        });

        fs.writeFile('out.html', window.document.documentElement.outerHTML,
                     function (error){
            if (error) throw error;
        });
    });
});
Run Code Online (Sandbox Code Playgroud)