我有一个包含复选框的div。我还有一个接受jquery对象参数的函数。它看起来像这样:
function analyze_checkbox(cb) { ... }
鉴于此,是否有一种直接的方法来了解 cb 参数的子位置?我在考虑这样的事情:
cb.parent().index(cb)
这样做的正确方法是什么?
谢谢,
欧文
答案 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()
的结果将是0
(link 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);