jQuery .each()返回DOM元素而不是jQuery对象

时间:2010-06-08 20:32:57

标签: dom jquery-selectors jquery

我可能会误解正在发生的事情但是从我可以告诉我在使用.each()时得到的是DOM元素而不是jQuery对象。

以下内容不起作用,因为this指的是DOM元素而不是jQuery对象

$("span[id$='_TotalItemCost']").each(function() {
    var someText = this.text();
});

修改后将this转换为jQuery对象,一切都很好

$("span[id$='_TotalItemCost']").each(function() {
    var someText = $(this).text();
});

我的选择器有什么时髦吗? jQuery .each() documentation是否错误,它不是jQuery对象,而是.each()返回的DOM元素?

2 个答案:

答案 0 :(得分:40)

该文档没有错,但您可能会误解jQuery对象是什么。

jQuery对象由$()函数返回。所以$("span[id$='_TotalItemCost']")是一个jQuery对象,它包含所选的每个span元素。

使用.each()将遍历jQuery对象中包含的元素。这就是为什么这是一个DOM节点而不是jQuery对象。

通过使用$(this)在此特定元素上使用jQuery方法,您做了正确的事。

答案 1 :(得分:5)

@Vincent Robert,你几乎完美地总结了它,但是让我稍微扩展一下。

即使JQuery是一个原型扩展其根实例的函数,它的行为更像是一个对象。

如果从方法/函数中分离对象并单独查看它们,您将了解如何构建jQuery接口。

$()视为一个对象,并将each()视为一种方法。你使用jQuery $()“selector”初始化一个对象,然后返回一个只包含你从选择器$()中选择的elemetns / data的对象。

然后这个方法/函数可以直接在选定的内容上运行,但是方法不应该返回一个jquery对象,因为大多数时候没有返回节点但只是字符串或布尔值,所以将它们包装在jQuery对象中没有意义。

由于您的OP基于每个函数,因此您不打算在那里接收jquery对象,因为每个函数都不是专门为节点和元素设计的

例如,你想要一个jquery对象吗?

$({a:'1',b:'2'}).each(function(){
});

这是坏的,没有意义,这就是为什么方法会/不应该返回对象的原因,除非该方法意味着返回单例或专门为对象返回而设计。

另外,当我说对象时,我不是说这样的json对象,而是方法/原型对象。

希望这会有所帮助。