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()
返回的内容与回调运行的上下文之间的区别。一开始也把我绊倒了。