jQuery:获取对象的第n个位置

时间:2010-10-13 08:32:30

标签: jquery

我有一个包含复选框的div。我还有一个接受jquery对象参数的函数。它看起来像这样:

function analyze_checkbox(cb) { ... }

鉴于此,是否有一种直接的方法来了解 cb 参数的子位置?我在考虑这样的事情:

cb.parent().index(cb)

这样做的正确方法是什么?

谢谢,

欧文

2 个答案:

答案 0 :(得分:3)

引自.index()

  

如果没有参数传递给   .index()方法,返回值为   一个表示位置的整数   jQuery中的第一个元素   对象相对于它的兄弟   元素

所以在你的情况下cb.index();应该这样做

http://www.jsfiddle.net/qQzte/

的示例

并且不要忘记结果是基于0的

答案 1 :(得分:1)

如果你的复选框真的是彼此的兄弟姐妹,那么Gaby的答案说cb.index()应该这样做是完全正确的。但是要小心,你了解index实际告诉你的是什么。例如,使用此标记:

<div id='thediv'>
    <label><input type='checkbox' value='1' name='one'>One</label>
    <label><input type='checkbox' value='2' name='two'>Two</label>
    <label><input type='checkbox' value='3' name='three'>Three</label>
    <label><input type='checkbox' value='4' name='four'>Four</label>
</div>

...如果您的cb来自(比方说)$('#thediv input[type=checkbox][name=three]')cb.index()的结果将是0link to example)。显然不是你想要的。

你可以通过几种方式解决这个问题。通过上面的具体示例,您可以查看父label相对于兄弟姐妹的位置:cb.parent().index()link to example)。但是根据你的标记,这可能很复杂。

有一种方法不太容易受到细微标记更改的影响:选择完全要考虑的元素列表,然后询问jQuery哪个cb在该列表中。因此,使用上面的标记,您可以这样做:

// The selector choose *exactly* the set of things we want to
// look at, and then `index` looks for `cb` within that list
var index = $('#thediv input[type=checkbox]').index(cb);

link to example