jQuery发现在Node.js中无法正常工作

我正在使用jQuery来查询Node.js中由jsdom创build的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个元素与类widget

但是,jQuery的find函数返回这些dom元素的常规JS数组,而不是一个包装了dom元素集合的jQuery对象。 显然,由于返回值是一个JS数组,所以我不能链接更多的jQuery函数。

我得到的错误是:

TypeError: Object [object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement] has no method 'each'

有人知道这里发生了什么? 为什么find一个jQuery对象? 我是否错过了一些明显的东西,或者是一个错误?

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

这工作:

 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 。 后者是在一个jQuery对象的实例中调用find 。 在上面的代码中,我正在做我们通常在浏览器中做$('.widget') 。 如果你想使用find你也可以这样做:

 var widgets = jquery(document.parentWindow)(document).find('.widget'); 

虽然jQuery().findlogging,我还没有findjQuery.find文档。 我相信这是一个实用的function,并不意味着在jQuery自己的代码之外使用。