我可能会误解正在发生的事情但是从我可以告诉我在使用.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元素?
答案 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对象,而是方法/原型对象。
希望这会有所帮助。