我有一些像这样的HTML:
<div class="TopClass">
<div class="ContentClass">
<div class="ActionClass">action</div>
</div>
<div class="ContentClass">
<div class="ActionClass">action</div>
</div>
<div class="ContentClass">
<div class="ActionClass">action</div>
</div>
</div>
我希望得到相对于TopClass的action类的索引;如果用户点击第二个Action类,它应返回2.
$('.ActionClass').click(function () {
alert($(this).parent().parent().index()); // not working
});
答案 0 :(得分:6)
像这样使用.index
,即使结构发生变化,也会始终为您提供.ActionClass
的索引。但是当.index
返回0-based
索引时,我将1
添加到其输出中:
$('.ActionClass').click(function () {
alert($(this).closest('.TopClass').find('.ActionClass').index(this) + 1);
});
另一种较短的方法可能是这样的,它到目前为止只能使用一个父.TopClass
容器,但如果你有不同的结构,请小心使用。以前的一个更安全,适用于一般情况
$('.ActionClass').click(function () {
alert($('.ActionClass').index(this) + 1);
});
答案 1 :(得分:2)
您的代码几乎是正确的,只需从父节点获取索引:
$('.ActionClass').click(function () {
alert($(this).parent().index());
});
<强>声明强>
除了.ContentClass
之外还有其他兄弟姐妹,这不起作用。为此你应该参考Joy的answer。
答案 2 :(得分:1)
你的父()。parent()让你的结构太高了:
$('.ActionClass').click(function () {
alert($(this).parent().index()); // not working
});
会工作,但它的基础为零,所以你会得到0,1和2的三次div点击。
http://jsfiddle.net/amelvin/AhReg/
修改强>
根据您的修改,您可以在index()方法上使用可选的选择器变量。
<div class="TopClass">
<div class="ContentClass">
<div class="ActionClass">action</div>
</div>
<div class="ContentClass">
<div class="ActionClass">action</div>
</div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="test"></div>
<div class="ContentClass">
<div class="ActionClass">action</div>
</div>
</div>
$('.ActionClass').click(function () {
alert($(this).parent().index(".ContentClass")); // not working
});
答案 3 :(得分:1)
$index = jQuery.inArray($(this)[0], $('.ActionClass')) + 1
无论HTML结构如何,此解决方案都能正常运行。它找到包含所有匹配的'.ActionClass'元素的数组中单击的'.ActionClass'元素的数组索引。