JSDOM:dom.window.document.innerHTML 未定义
JSDOM: dom.window.document.innerHTML is undefined
我正在创建一个 node.js 脚本来解析来自网站的内容。在使用 returned HTML 之前,我想删除一些元素和属性。但是,当尝试从 jsdom 检索 HTML 时,我只 returned undefined
。这似乎发生在我对 HTML 进行修改之前。如何使用jsdom修改HTML和return呢?
const jsdom = require('jsdom');
...
var htmlString = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html lang=en><head>...`
paresHTML(htmlString);
function parseHTML(htmlString) {
const dom = new jsdom.JSDOM(htmlString);
console.log(dom.window.document.innerHTML); // This returns undefined
dom.window.document.querySelectorAll('script').forEach(element => element.remove());
dom.window.document.querySelectorAll('head').forEach(element => element.remove());
dom.window.document.querySelectorAll('link').forEach(element => element.remove());
dom.window.document.querySelectorAll('style').forEach(element => element.remove());
dom.window.document.querySelectorAll('iframe').forEach(element => element.remove());
dom.window.document.querySelectorAll('noscript').forEach((element) => {
var replacement = dom.window.document.createElement('div');
replacement.setAttribute('class', 'noscript');
replacement.innerHTML = element.innerHTML;
element.parentNode.replaceChild(replacement, element);
});
dom.window.document.querySelectorAll('img[src]').forEach((element) => {
const src = element.getAttribute('src');
element.setAttribute('data-src', src);
element.removeAttribute('src');
});
dom.window.document.querySelectorAll('[style]').forEach((element) => {
element.removeAttribute('style');
});
return dom.window.document.innerHTML; // This also returns undefined
}
就像前端一样,document
没有innerHTML
属性:
console.log(document.innerHTML);
然而,document.documentElement
确实有它:
console.log(document.documentElement.innerHTML);
JSDom 的工作方式相同。将 .documentElement
添加到 document
访问,例如
console.log(dom.window.document.documentElement.innerHTML);
结果:
<head></head><body>...</body>
我正在创建一个 node.js 脚本来解析来自网站的内容。在使用 returned HTML 之前,我想删除一些元素和属性。但是,当尝试从 jsdom 检索 HTML 时,我只 returned undefined
。这似乎发生在我对 HTML 进行修改之前。如何使用jsdom修改HTML和return呢?
const jsdom = require('jsdom');
...
var htmlString = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html lang=en><head>...`
paresHTML(htmlString);
function parseHTML(htmlString) {
const dom = new jsdom.JSDOM(htmlString);
console.log(dom.window.document.innerHTML); // This returns undefined
dom.window.document.querySelectorAll('script').forEach(element => element.remove());
dom.window.document.querySelectorAll('head').forEach(element => element.remove());
dom.window.document.querySelectorAll('link').forEach(element => element.remove());
dom.window.document.querySelectorAll('style').forEach(element => element.remove());
dom.window.document.querySelectorAll('iframe').forEach(element => element.remove());
dom.window.document.querySelectorAll('noscript').forEach((element) => {
var replacement = dom.window.document.createElement('div');
replacement.setAttribute('class', 'noscript');
replacement.innerHTML = element.innerHTML;
element.parentNode.replaceChild(replacement, element);
});
dom.window.document.querySelectorAll('img[src]').forEach((element) => {
const src = element.getAttribute('src');
element.setAttribute('data-src', src);
element.removeAttribute('src');
});
dom.window.document.querySelectorAll('[style]').forEach((element) => {
element.removeAttribute('style');
});
return dom.window.document.innerHTML; // This also returns undefined
}
就像前端一样,document
没有innerHTML
属性:
console.log(document.innerHTML);
然而,document.documentElement
确实有它:
console.log(document.documentElement.innerHTML);
JSDom 的工作方式相同。将 .documentElement
添加到 document
访问,例如
console.log(dom.window.document.documentElement.innerHTML);
结果:
<head></head><body>...</body>