错误:jQuery需要一个带文档的窗口

Mar*_*tin 45 jquery node.js

所以一切都很好,直到做npm更新,现在事情不像以前那样有效.

一点背景:在我的代码中我使用jquery来解析文本html.我不使用窗口,我不使用jsdom.过去工作得很好:

$ = require("jquery"); 
$(html).find("<h1>").html("The title"); 
Run Code Online (Sandbox Code Playgroud)

但现在我明白了:jQuery需要一个带文档的窗口

我该如何解决?

Mic*_*ael 33

node.js-jQuery定义在一行中:

// definition
var $ = require('jquery')(require("jsdom").jsdom().parentWindow);

// usage
$("body").append("<div>TEST</div>");
console.log($("body").html());
Run Code Online (Sandbox Code Playgroud)

  • 这没用,'parentWindow`没有定义.在[下面的注释](http://stackoverflow.com/a/33674128/242365)中使用`defaultView`修复它. (5认同)

Lou*_*uis 15

jQuery的npm包肯定用它来包含jsdom,这就是为什么它在Node中可以工作的原因:jQuery需要有一些DOM环境可以使用.

您可以通过执行操作检查旧版本npm install jquery@1.8.3.你会看到jsdom随之安装.出于某种原因,他们似乎已从最近的版本中删除了jsdom.我不知道为什么.

但是,使用jsdom 7.x来运行jQuery代码很简单:

var jsdom = require("jsdom");
var window = jsdom.jsdom().defaultView;

jsdom.jQueryify(window, "http://code.jquery.com/jquery.js", function () {
  var $ = window.$;
  $("body").prepend("<h1>The title</h1>");
  console.log($("h1").html());
});
Run Code Online (Sandbox Code Playgroud)

该路径可以更改为不同版本的jQuery或本地文件.

注意:早期版本的jsdom,包括3.x系列,需要使用该行var window = jsdom.jsdom().parentWindow;代替var window = jsdom.jsdom().defaultView;.4.x使它parentWindow不再有效.


Ara*_*n K 15

这对我有用

var jsdom = require('jsdom');
$ = require('jquery')(new jsdom.JSDOM().window);
Run Code Online (Sandbox Code Playgroud)

  • 即时通讯使用ES6(node.js 11.3),可以正常工作 (3认同)

Mar*_*tin 9

我解决了 不得不首先删除jsdom和jquery然后npm安装jsdom jquery.

然后这个:

var jsdom = require("jsdom"); 
$ = require("jquery")(jsdom.jsdom().createWindow()); 
Run Code Online (Sandbox Code Playgroud)

事实证明,我拥有最新版本非常重要.否则它不起作用..

  • 这与我的版本(v0.10.28)和当前的jquery和jsdom模块不兼容. (6认同)

Hol*_*dad 7

jsdom似乎有一个新版本,因此现在它的工作方式略有不同。这里有一个例子:

const { JSDOM } = require("jsdom");
const myJSDom = new JSDOM (html);
const $ = require('jquery')(myJSDom.window);
Run Code Online (Sandbox Code Playgroud)

现在您可以像以前在 jQuery 上一样进行搜索:

$("<h1>").html("The title");
Run Code Online (Sandbox Code Playgroud)

注意 jQuery 安装,因为您应该jquery全部写成小写,例如npm install jquery.