gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:08:30 25 4
gpt4 key购买 nike

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

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 函数,例如 each

我得到的错误是:

TypeError: 对象 [object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement] 没有方法 '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 对象的 instance 中调用 find。在上面的代码中,我正在执行我们通常在浏览器中作为 $('.widget') 执行的操作。如果你想使用 find,你也可以这样做:

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

虽然jQuery().find 有文档,但我没有找到jQuery.find 的文档。我相信这是一个实用函数,不应该在 jQuery 自己的代码之外使用。

关于javascript - jQuery 发现在 Node.js 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27838848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com