我正在使用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”,
答案 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自己的代码之外使用。