9

我想使用 JSDo 来执行一些基于服务器的 DOM 操作。但是,尽管明确启用了 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 正常工作?

4

2 回答 2

13

自己找到了这个问题的答案。

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();

跑步

console.log(document.querySelector)

现在显示该功能存在。

于 2012-11-24T18:50:54.903 回答
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);
于 2021-07-28T18:50:40.677 回答