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 总是返回数组吗?的主要内容,如果未能解决你的问题,请参考以下文章