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

标签 node.js jsdom native-methods

我想使用 JSDom 来执行一些服务器方面的 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 正常工作?

最佳答案

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

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)

现在显示函数存在。

关于node.js - jsdom - document.querySelector 已启用,但文档中缺少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544179/

相关文章:

javascript - Node.js 需要一个相对于包根目录的文件

node.js - NodeJS 与 Apache 和目录列表

javascript - 为什么我在 Jest 中得到 "TextEncoder is not defined"?

node.js - 在基于 jsdom 的测试中调用 setState 导致 "Cannot render markup in a worker thread"错误

node.js - 为什么 JSDOM 在与 Sinon 假定时器一起使用时会进入无限循环?

java - 不满意的链接错误帮助 Java JNI Eclipse

node.js - YouTube : Error, 需要登录吗?

node.js - multer 文件上传在服务器上通过 Express 挂起,但在本地挂起

java - 为什么 NativeMethodAccessorImpl 声明 InitationTargetException

android - 如何在不使用支持库的情况下实现水平滑动?