jquery index()方法问题按属性值选择

时间:2011-08-12 02:17:34

标签: javascript jquery jquery-selectors checkbox

有人可以请look at this吗?

你会看到第一个警告打印-1而我期待1.任何人都知道为什么?

小提琴的基本代码:

<input type="checkbox" value="0" />0
<input type="checkbox" value="1" />1
<input type="checkbox" value="2" />2
<input type="checkbox" value="3" />3
alert($(':checkbox').index("input[value='1']"));
alert($(':checkbox').index("input[value='0']"));

4 个答案:

答案 0 :(得分:4)

你的选择器被颠倒了:

示例: http://jsfiddle.net/RaV35/

 // element---v    collection----------v
alert($("input[value='0']").index(":checkbox"));
alert($("input[value='1']").index(":checkbox"));

index()[docs]方法传递给选择器时,您希望索引的单个元素是调用.index()的元素。

传递给.index()的选择器表示测试原始jQuery对象中元素的集合。

当原始jQuery对象(左侧)也包含一个集合时,只测试第一个对象的右侧选择器的索引。这就是value="0"正在工作的原因。

 //   v--- only the first is tested (and it has value="0")...
$(':checkbox').index("input[value='0']")
 //   ----------------------^ ...and it is at index 0 of this "collection"

答案 1 :(得分:0)

alert($(':checkbox[value='1']').index());
alert($(':checkbox[value='0']').index());

答案 2 :(得分:0)

你需要传递一个jQuery对象:http://jsfiddle.net/ybKzJ/1/

alert($(':checkbox').index($("input[value='1']")));
alert($(':checkbox').index("input[value='0']"));

编辑:

不,这似乎不对,因为第二个工作正常。

... ...好奇

答案 3 :(得分:0)

我不确定为什么你必须使用index()。为什么不把它全部放在选择器中:

$('input:checkbox[value="2"]');

你可以看到它在这个小提琴中起作用:http://jsfiddle.net/jfriend00/Xa6hA/

如果您确实想要分多个阶段进行,那么我这样做更合乎逻辑:

$('input:checkbox').filter('[value="3"]');

这会获取所有复选框,然后过滤列表中只包含value="3"的复选框,这似乎比index()的工作方式更直观。