【发布时间】:2015-07-19 03:56:38
【问题描述】:
我想加载一个 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?
});
});
});
【问题讨论】:
-
我认为
$(document.body.getElementsByTagName("*"))有两点错误。首先,它是 jQuery 和 javascript 选择器的组合。在 jQuery 中应该是$("*"),在 javascript 中应该是 或document.body.getElementsByTagName("*")。其次,是服务端代码,所以这里没有jQuery,除非我不了解jQuery的服务端实现。 -
我忘记在这篇文章中包含 var $ = require('jquery')(window),所以我对其进行了编辑以包含它。使用 document.body.getElementsByTagName("*") (不带 jquery)时,我可以只编辑每个节点的文本吗?然后保存编辑好的html?
-
不过,
$(document.body.getElementsByTagName("*"))没有意义,并且可能无效,即使加载了 jQuery。所以你告诉我你正在运行 jQuery server 端?我四处搜寻,我看不到使用它的地方,甚至说根本不可能。 jQuery 是为 DOM 操作而设计的,服务器上没有 DOM。这里有一些我不明白的地方。fs是一个 SERVER 模块,read和write只能从服务器实现,不能从浏览器实现。请确认这是一个 server 端脚本(= 不在浏览器中运行)并且您正在尝试在其中使用 jQuery。 -
我是从另一个 stackoverflow 问题中得到的。这确实是一个服务器端脚本。我为此使用 jquery 的 npm 模块 (npmjs.com/package/jquery)。
-
这是一个构建您自己版本的 jQuery 的模块,而不是在服务器端使用它。不过,jQuery 是 client 端的,它不在服务器上运行。您的服务器脚本必须使用纯 JavaScript。
document.body.getElementsByTagName确实毫无意义,因为在服务器上,没有 DOM,没有元素,也没有标签(没有名称)。这是行不通的,您正在混合前端和后端代码。这就像将javascript和PHP混合在一起,希望它能起作用,这是不可能的。
标签: javascript jquery html node.js jsdom