jsdom - document.querySelector已启用,但文档中缺少

mik*_*ana 7 native-methods node.js jsdom

我想使用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();
Run Code Online (Sandbox Code Playgroud)

然而:

console.log(document.querySelector)
Run Code Online (Sandbox Code Playgroud)

返回

undefined
Run Code Online (Sandbox Code Playgroud)

如何使用jsdom使document.querySelector正常工作?

mik*_*ana 10

我自己找到了这个答案.

JSDom有一个"默认文档"以及对多个附加文档的支持.

我最初的理解是在默认文档上启用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();
Run Code Online (Sandbox Code Playgroud)

运行

console.log(document.querySelector)
Run Code Online (Sandbox Code Playgroud)

现在显示函数存在.


F1r*_*fly 3

根据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);
Run Code Online (Sandbox Code Playgroud)