.index() 是 jQuery 对象的一个方法,通常用于在调用该方法的 jQuery 对象中搜索特定的元素。此方法有四种具有不同语义的签名,可能会让人感到困惑。本文将详细介绍如何理解 .index() 在每种签名下的工作方式。
link 不带参数的 .index()
|
1
2
3
4
5
6
7
|
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
|
在第一个例子中,.index() 返回 #foo1 在其父元素中基于零的索引值。由于 #foo1 是其父元素的第二个子元素,因此 index() 返回 1。
注意:在 jQuery 1.9 之前,.index() 只能可靠地作用于单个元素,这就是为什么我们在每个示例中都使用了 .first()。在 jQuery 1.9+ 中,这一点可以忽略,因为 API 已更新,明确规定它仅对第一个元素进行操作。
link 带有字符串参数的 .index()
|
1
2
3
4
5
6
7
8
|
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
|
当调用 .index() 并传入字符串参数时,需要考虑两点。首先,jQuery 会隐式地对原始 jQuery 对象调用 .first()。在这种情况下,它将查找第一个元素的索引,而不是最后一个元素的索引。这种行为并不一致,所以请在此处保持谨慎。
第二点需要考虑的是,jQuery 会使用传入的字符串选择器查询整个 DOM,并检查在该新查询的 jQuery 对象中的索引。例如,在上面的最后一个示例中使用 .index( "div" ) 时,jQuery 会选择文档中所有的 <div> 元素,然后在其中搜索包含调用 .index() 的 jQuery 对象中第一个元素的索引。
link 带有 jQuery 对象参数的 .index()
|
1
2
3
4
5
6
7
8
|
|
|
1
2
3
4
5
6
7
8
9
10
11
12
|
|
在这种情况下,系统会检查传入 .index() 的 jQuery 对象的第一个元素,是否匹配原始 jQuery 对象中的元素。位于 .index() 左侧的原始 jQuery 对象是类数组的,会从索引 0 到 length - 1 进行搜索,以查找参数 jQuery 对象中的第一个元素。
link 带有 DOM 元素参数的 .index()
在这种情况下,系统会检查传入 .index() 的 DOM 元素,是否匹配原始 jQuery 对象中的元素。一旦理解了其他所有情况,这应该是最简单的一种。它与前一种情况非常相似,不同之处在于 DOM 元素是直接传递的,而不是从 jQuery 对象容器中获取的。