jQuery在Node.js中找不到正常工作

时间:2015-01-08 11:17:31

标签: javascript jquery node.js jsdom

我正在使用jQuery查询Node.js中由jsdom创建的dom:

var html = '<p class="widget">one</p><p class="widget">two</p><p class="widget">three</p>';
var jsdom = require('jsdom');
var jquery = require('jquery');
var document = jsdom.jsdom(html);
var widgets = jquery(document.parentWindow).find('.widget');
var arr = widgets instanceof Array; //true
widgets.each(function() { }) //each is not defined, its not a jquery object

我知道文件很好。它包含3个带有{​​{1}}类的元素。

然而,jQuery的find函数返回这些dom元素的常规JS数组,而不是包装dom元素集合的jQuery对象。显然,如果返回值是JS数组,那么我就无法链接更多jQuery函数,如widget

我得到的错误是:

each

有谁知道这里发生了什么?为什么TypeError: Object [object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement] has no method 'each'不返回jQuery对象?我错过了一些明显的东西还是一个小虫?

版本: “jquery”:“2.1.1”, “jsdom”:“2.0.0”,

1 个答案:

答案 0 :(得分:4)

这有效:

var html = '<p class="widget">one</p><p class="widget">two</p><p class="widget">three</p>';
var jsdom = require('jsdom');
var jquery = require('jquery');
var document = jsdom.jsdom(html);
var widgets = jquery(document.parentWindow)('.widget');
widgets.each(function() {
    console.log(this);
});

jquery()会返回浏览器中window.jQuery可访问的内容。因此,您正在调用jQuery.find,这与使用jQuery().find不同。后者在find对象的实例中调用jQuery。在上面的代码中,我正在做我们通常在浏览器中执行的$('.widget')。如果您想使用find

,也可以执行此操作
var widgets = jquery(document.parentWindow)(document).find('.widget');

虽然记录了jQuery().find,但我找不到jQuery.find的文档。我相信它是一个实用函数,不能在jQuery自己的代码之外使用。