带选择器字符串的Jquery Index函数

时间:2015-01-06 10:15:24

标签: jquery

正如我从Jquery学习中所知,可以使用jquery的函数索引:

  • .index() //没有参数
  • .index(domObject) //参数是一个dom对象
  • .index(JqueryObject) //参数是一个Jquery对象
  • .index("selectorString") //参数是一个选择器字符串

我正在使用参数测试索引函数是一个选择器字符串。

html - >体:

<div class="name" id="id1">
  <h2>Z</h2>
  <h2>X</h2>
</div>
<div class="name" id="id2">
  <h2>A</h2>
  <h2>B</h2>
</div>

Jquery脚本:

var index1 = $('.name').index("#id1");
var index2 = $('.name').index("#id2");
alert(index1);
alert(index2);

结果为:0表示index1(正确),-1表示index2(不正确)。

所以,问题是:为什么我无法获得div#id2的正确索引值?

jsfiddle:http://jsfiddle.net/GhPxD/60/

3 个答案:

答案 0 :(得分:3)

这里没有错误,API只是......很奇怪。 Here's the documentation

  

如果在元素集合和DOM元素上调用.index()或   传入jQuery对象,.index()返回一个指示的整数   传递元素相对于原​​始集合的位置。

     

如果选择器字符串作为参数传递,则.index()返回一个   整数,指示jQuery中第一个元素的位置   相对于选择器匹配的元素的对象。如果   找不到元素,.index()将返回-1。

你想要的是

$('#id2').index(".name");

让这个功能以不同的方式运行是非常令人困惑的IMO。

答案 1 :(得分:0)

您可以在index方法中传递jquery对象以使其工作:

var index = $('.name').index($("#id2"));

<强> Working Demo

答案 2 :(得分:-1)

statement 1 :  var index1 = $('.name').index("#id1");
statement 2 :  var index2 = $('.name').index("#id2");

声明1    1.如您所知,当您在jquery中使用任何选择器时,它会返回第一个匹配元素    2.现在你试图找到index("#id1")的索引,以便它在索引0处成功找到,因此它return 0

声明2    1.如您所知,当您在jquery中使用任何选择器时,它会返回第一个匹配元素    2.现在您尝试找到index("#id2")的索引,因此无法找到#id2的任何子元素,因此reurn -1