jQuery 总是返回数组吗?

Posted

技术标签:

【中文标题】jQuery 总是返回数组吗?【英文标题】:Does jQuery always return array? 【发布时间】:2011-10-22 05:37:32 【问题描述】:

选择元素时jQuery是否总是返回数组(当然如果至少存在一个元素)?示例:

$('#Myelement')
$('div')
$('tbody')

如果选择器是一个 ID 怎么办? 如果选择器是一个元素但只出现一次怎么办?

【问题讨论】:

【参考方案1】:

因为$([selector]) 就像$.find([selector]) 的快捷方式,它是一个元素搜索。

使用此类jQuery 函数执行的任何操作都可能返回一个或多个结果,因为您正在搜索而不是“选择结果”。

【讨论】:

【参考方案2】:

jQuery 函数总是返回一个jQuery 对象(基于数组),即使没有与选择器匹配的元素。

这样你总是可以调用一个应该影响找到的元素的方法,即使没有匹配的元素。如果 jQuery 对象不包含任何元素,它就什么也不做。

如果你想知道一个jQuery对象是否包含任何元素,你可以使用length属性。

【讨论】:

在我看来,您的第二个陈述不是一个好的解释,因为这不是 jQuery 返回数组的原因。这是因为 $()​​ 会找到匹配给定选择器的元素,所以你不能指望元素具有某些 id,而是包含具有某些 id 的元素的结果。 @Matías Fidemraizer:第二段不是解释方法返回数组的原因,而是解释如何利用它来发挥自己的优势。恐怕我不明白你提供的解释是什么意思。 但是当我做$('td')[0].html('hi')时,它给了我一个例外,它说索引没有.html方法,这意味着jQuery返回的数组上的元素不是jQuery对象的一部分。我错了吗? @domanokz:jQuery 对象包含元素,它不包含 jQuery 对象。如果您使用[0] 从jQUery 对象中获取一个元素,那么它是一个无法使用jQuery 方法的普通DOM 元素。您可以使用first 方法将结果限制为第一个元素:$('td').first().html('hi'),或者您可以将元素包装在一个 jQuery 对象中:$($('td')[0]).html('hi')(但如果选择器找不到任何元素,则会导致错误)。 @Guffa:实际上恰恰相反。 jQuery 对象不是基于数组,它是一个通过添加 .length.splice() 来表现“类似数组”的对象

以上是关于jQuery 总是返回数组吗?的主要内容,如果未能解决你的问题,请参考以下文章

jquery 从返回的数组中生成单个变量

jquery选择器$("...")返回的是数组,为啥还能继续练式操作$("...").方法 ?

为啥“loadNibNamed”方法返回数组?

jquery每个循环都返回false而不是结束函数

猫鼬总是返回空数组? [复制]

猫鼬总是返回空数组? [复制]