我正在尝试使用容器内所有链接之间的箭头键来编写某些东西,但由于某种原因,我无法获得#abc中href元素的索引,但我可以在xyz中使用相同的一般代码。
对于abc中的任何点击,它都显示为0,为什么?
<div id="woot">
<div id="xyz">
<a href="#">x</a>
<a href="#">y</a>
<a href="#">z</a>
</div>
<div id="abc">
<ul>
<li><a href="#">a</a></li>
<li><a href="#">b</a></li>
<li><a href="#">c</a></li>
</ul>
</div>
</div>
$(document).ready(function() {
$('#woot a').on('click', function() {
var current = $("#woot a:focus").index();
var length = $('#woot a').length;
console.log("current index is: " + current + " total of: " + length);
});
});
答案 0 :(得分:3)
您可以根据包含所有后代a
元素的jQuery对象获取所单击的a
元素的索引。例如,在事件侦听器内部,您可以将this
作为参数传递给.index()
方法
$('#letters a').index(this);
这样做,索引将相对于jQuery对象$('#letters a')
而不是兄弟元素(如示例中所示)。
$('#letters a').on('click', function(e) {
var current = $('#letters a').index(this);
var length = $('#letters a').length;
console.log("current index is: " + current + " total of: " + length);
});
由于你在三个不同的地方使用$('#letters a')
,你也可以在变量中存储对jQuery对象的引用,这样就不必多次查询它了:
var $anchors = $('#letters a');
$anchors.on('click', function(e) {
var current = $anchors.index(this);
var length = $anchors.length;
console.log("current index is: " + current + " total of: " + length);
});
作为旁注,索引是从零开始的,而jQuery对象的长度则不是。这意味着单击最后一个元素将记录:
当前指数为:5总计:6
您可能希望通过在索引中添加一个或从长度中减去一个来考虑这一点。
答案 1 :(得分:1)
$(document).ready(function() {
$('#woot a').on('click', function() {
var intCurrentIndex = $(this).index();
var intLength = $('#woot a').length; console.log("current index is: " + intCurrentIndex + " total of: " + intLength);
});
})
答案 2 :(得分:0)
对于abc中的任何点击,它都显示为0,为什么?
<强>原因:强>
在div#abc
下的ul
li
下,每个a
只有一个子a
元素。所以它会为每个锚元素返回0。
注意:div#abc
中的 div#xyz
元素不是var current = $("#woot a").index($("a:focus"));//It will return the index based on this $("#woot a") collection(array) elements.
//var current = $("#woot a").index($(this));
中的直接子元素。
更新:(征求意见)
您应该以这种方式使用index()
,
var current = $("#woot a:focus").index(); //It will return the index considering its immediate parent.
而不是这个
A