我想加載一個HTML文件(使用fs.read),使用jsdom加載DOM,然後更改正文節點的文本(通過jquery)。然後我想將編輯的DOM窗口保存爲HTML文件。有沒有辦法做到這一點?我正在使用的代碼如下:Node.js - 如何編輯jsdom窗口中的元素並將窗口另存爲新的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')(窗口),所以我編輯它來包含它。 當使用document.body.getElementsByTagName(「*」)(不含jquery)時,我可以編輯每個節點的文本嗎?然後保存編輯的HTML? – Eva
儘管如此,'$(document.body.getElementsByTagName(「*」))'沒有意義,並且可能無效,即使加載了jQuery。所以你告訴我你正在運行jQuery * server * -side?我搜索了四周,我可以看到沒有使用這個地方的地方,甚至可以說這是可能的。 jQuery是爲DOM操作製作的,並且服務器上沒有DOM。這裏有些我不明白的地方。 'fs'是一個SERVER模塊,'read'和'write'只能通過服務器而不是瀏覽器來實現。請確認這是一個* server * -side腳本(=不在瀏覽器中運行),並且您正在嘗試在其中使用jQuery。 –