我有一个无序列表,里面有几个列表项。其中每个都是一个链接。我想要做的是当有人点击其中的链接时找到列表项的位置。
例如,如果有人点击第3个列表项中的链接,它会给我一个值3。
我已经有了点击部分,只需要弄清楚如何获得列表项的位置
仅限Javascript
答案 0 :(得分:5)
这是一个简单的实例,可以满足您的需求(除了列表没有链接)
在“结果”框中,单击其中一个列表项。它将有一个弹出序列号的处理程序。
Javascript代码如下
var els = document.getElementsByTagName('li');
Array.prototype.forEach.call(els,function(el,i){
el.addEventListener('click', function(){alert(i);}, false);
}) ;
虽然els
类似于数组,但它没有forEach
方法。我们使用Array.prototype.forEach
方法来解决这个问题。
更新:这是第二个实例,它将内容缩小到特定列表,而不是所有列表项。
此外,正如评论者指出的那样,forEach
并非普遍支持,但此处使用它来简化代码。
答案 1 :(得分:0)
// A ul only has li childnodes.
count 'backwards' from the li element containing the clicked link.
var count= 1, li= linkelement;
while(li && li.nodeName!= 'LI') li= li.parentNode; // get the li element
while(li){
li= li.previousSibling;
// count previous li elements
++count;
}
alert(count)// firstChild is 1, not 0
答案 2 :(得分:0)
使用jQuery:向列表中的所有链接添加一个click事件,首先选择链接的父“li”元素,然后向后选择每个'li'元素,直到没有更多要选择,并且空的jquery对象是回。应该很容易适应。
$('li a').click(function(){
$node = $(this).parent();
result = 0;
while ($node.length > 0){
result++;
$node = $node.prev();
}
alert(result);
return false;
});