jQuery 发现在 Node.js 中无法正常工作
jQuery find not working correctly in Node.js
我正在使用 jQuery 查询由 jsdom 在 Node.js 中创建的 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 个元素 class widget
.
然而,jQuery 的 find 函数是 returning 这些 dom 元素的常规 JS 数组,而不是 jQuery 对象包装 dom 元素的集合。显然,由于 return 值是一个 JS 数组,我不能再链接更多 jQuery 函数,例如 each
.
我得到的错误是:
TypeError: Object [object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement] has no method 'each'
有谁知道这里发生了什么?为什么 find
不是 return 一个 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()
returns 在浏览器中可以访问的内容 window.jQuery
。所以你正在调用 jQuery.find
,这与使用 jQuery().find
不同。后者在 jQuery
对象的 实例 中调用 find
。在上面的代码中,我正在做我们通常在浏览器中做的事情 $('.widget')
。如果您想使用 find
:
也可以这样做
var widgets = jquery(document.parentWindow)(document).find('.widget');
虽然有 jQuery().find
的文档,但我没有找到 jQuery.find
的文档。我相信这是一个实用函数,不能在 jQuery 自己的代码之外使用。
我正在使用 jQuery 查询由 jsdom 在 Node.js 中创建的 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 个元素 class widget
.
然而,jQuery 的 find 函数是 returning 这些 dom 元素的常规 JS 数组,而不是 jQuery 对象包装 dom 元素的集合。显然,由于 return 值是一个 JS 数组,我不能再链接更多 jQuery 函数,例如 each
.
我得到的错误是:
TypeError: Object [object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement] has no method 'each'
有谁知道这里发生了什么?为什么 find
不是 return 一个 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()
returns 在浏览器中可以访问的内容 window.jQuery
。所以你正在调用 jQuery.find
,这与使用 jQuery().find
不同。后者在 jQuery
对象的 实例 中调用 find
。在上面的代码中,我正在做我们通常在浏览器中做的事情 $('.widget')
。如果您想使用 find
:
var widgets = jquery(document.parentWindow)(document).find('.widget');
虽然有 jQuery().find
的文档,但我没有找到 jQuery.find
的文档。我相信这是一个实用函数,不能在 jQuery 自己的代码之外使用。