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().find
logging,我还没有findjQuery.find
文档。 我相信这是一个实用的function,并不意味着在jQuery自己的代码之外使用。