我想使用JSDom来执行一些服务器级的DOM操作。但是,尽管explcitly启用了querySelector,但在创建的文档中未定义:
var jsdom = require('jsdom');
// Yep, we've got QuerySelector turned on
jsdom.defaultDocumentFeatures = {
QuerySelector: true
};
var dom = jsdom.defaultLevel;
var document = jsdom.jsdom("<html><body><h1>Hello StackOverflow</h1></body></html>"),
window = document.createWindow();
然而:
console.log(document.querySelector)
返回
undefined
如何使用jsdom使document.querySelector正常工作?
答案 0 :(得分:10)
我自己找到了答案。
JSDom有一个&#39;默认文件&#39;以及对多个附加文件的支持。
我最初的理解是在默认文档上启用QuerySelector会在所有文档上启用它。这是不正确的。
我需要在我创建的(非默认)文档上启用QuerySelector。
以下工作代码:
var jsdom = require('jsdom');
var dom = jsdom.defaultLevel;
// QuerySelector must be turned on on the specificdocument we're creating
var document = jsdom.jsdom("<html><body><h1>Hello</h1></body></html>", null, {
features: {
QuerySelector: true
}
}),
window = document.createWindow();
运行
console.log(document.querySelector)
现在显示该功能存在。
答案 1 :(得分:1)
按照 JSDOM 文档,这里是 16.6.0 版的更新代码:
const { JSDOM } = require("jsdom");
const dom = new JSDOM("<html><body><h1>Hello</h1></body></html>");
const document = dom.window.document;
console.log(document.querySelector);