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

each()返回DOM元素,而不是jQuery对象,dom,jquery-selectors,jquery,Dom,Jquery Selectors,Jquery,我可能误解了正在发生的事情,但从我可以看出,当我使用.each()时,我得到的是一个DOM元素,而不是一个jQuery对象 以下内容不起作用,因为此引用的是DOM元素,而不是jQuery对象 $("span[id$='_TotalItemCost']").each(function() { var someText = this.text(); }); 修改为将此转换为jQuery对象,一切正常 $("span[id$='_TotalItemCost']").each(function

我可能误解了正在发生的事情,但从我可以看出,当我使用
.each()
时,我得到的是一个DOM元素,而不是一个jQuery对象

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

$("span[id$='_TotalItemCost']").each(function() {
    var someText = this.text();
});
修改为将此转换为jQuery对象,一切正常

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

我的选择器有什么问题吗?是错误的,它不是jQuery对象,而是由
返回的DOM元素。each()

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

jQuery对象由
$()
函数返回。因此,
$(“span[id$=''u TotalItemCost'])
是一个jQuery对象,它包含所选的每个span元素

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


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

@Vincent Robert,您非常完美地总结了它,但让我稍微扩展一下

尽管JQuery是一个原型扩展其根实例的函数,但其行为更像一个对象

如果将对象与方法/函数分开并分别查看它们,那么您将了解jQuery接口是如何构建的

我把
$()
看作一个对象,把
每一个()
看作一个方法。使用jQuery
$()
“选择器”初始化一个对象,该选择器返回一个只包含从选择器
$()
中选择的元素/数据的对象

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

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

例如,您想在这里使用jquery对象吗

$({a:'1',b:'2'}).each(function(){
});
这是不对的,也是毫无意义的,这就是为什么方法会/不应该返回对象的原因,除非该方法打算返回一个单例,或者是专门为对象返回而设计的

另外,当我说object时,我不是说json对象本身,而是指方法/原型对象


希望这能有所帮助。

此外,jQuery对象比DOM对象本身更重-如果我们追求的是简单的东西,我们中的一些人不希望有额外的绒毛..太棒了,刚刚在文档中发现了这个我错过了的小贴士回调是在当前DOM元素的上下文中触发的,因此关键字
this
引用元素。$(表达式)。每个(..)都返回jquery实例以进行链接。这可能就是jquery文档所指的内容。右-是
.each()
返回的内容与回调运行的上下文之间的区别。一开始也把我绊倒了。