所以一切都很好,直到做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)
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)
我解决了 不得不首先删除jsdom和jquery然后npm安装jsdom jquery.
然后这个:
var jsdom = require("jsdom");
$ = require("jquery")(jsdom.jsdom().createWindow());
Run Code Online (Sandbox Code Playgroud)
事实证明,我拥有最新版本非常重要.否则它不起作用..
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.
| 归档时间: |
|
| 查看次数: |
48364 次 |
| 最近记录: |