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

ahs*_*ele 36 jquery dom jquery-selectors

我可能误解了正在发生的事情,但是我可以告诉我在使用时获取DOM元素而不是jQuery对象.each().

以下内容不适this用于DOM元素而不是jQuery对象

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

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

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

我的选择器有什么时髦吗?是jQuery的.each()文档错误的,它不是一个jQuery对象,而是一个DOM元素被退回.each()

Vin*_*ert 40

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

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

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

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

  • 更进一步,jQuery对象比DOM对象本身更重 - 如果我们追求简单的东西,我们中的一些人不需要额外的毛病. (2认同)
  • 真棒,只是在我遗漏的文档中发现了这个小问题*回调是在当前DOM元素的上下文中触发的,所以关键字`this`指的是元素.* (2认同)
  • $(表达式).each(..)确实返回链接的jquery实例.这可能是jquery文档所指的内容. (2认同)

Rob*_*itt 5

@Vincent Robert,您几乎完美地总结了这一点,但让我稍微扩展一下。

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

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

si被$()视为对象,并被each()视为方法。您使用jQuery $()“选择器” 初始化对象时,女巫又返回仅包含从选择器中选择的要素/数据的对象$()

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

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

例如,您要在此处使用jquery对象吗?

$({a:'1',b:'2'}).each(function(){
});
Run Code Online (Sandbox Code Playgroud)

这将是不好的,毫无意义的,这就是为什么方法不应该/不应该返回对象的原因,除非该方法的意思是返回单例或专门为对象返回而设计。

另外,当我说对象时,我不是在谈论json对象,而是方法/原型对象。

希望这会有所帮助。