我有一个无序列表,里面有几个列表项。每个里面都有一个链接。我想要做的是当有人点击里面的链接时找到列表项的位置。
例如,如果有人单击第三个列表项内的链接,它会给我一个值 3。
我已经有了点击部分,只需要弄清楚如何获取列表项的位置
仅限 JavaScript
我有一个无序列表,里面有几个列表项。每个里面都有一个链接。我想要做的是当有人点击里面的链接时找到列表项的位置。
例如,如果有人单击第三个列表项内的链接,它会给我一个值 3。
我已经有了点击部分,只需要弄清楚如何获取列表项的位置
仅限 JavaScript
这是一个简单的实时示例,可以满足您的需求(列表没有链接除外)
在“结果”框中单击列表项之一。它将有一个弹出其序列号的处理程序。
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
它并未得到普遍支持,但在这里用于简化代码。
// 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
使用 jQuery:向列表中的所有链接添加点击事件,首先选择链接的父 'li' 元素,然后向后选择每个 'li' 元素,直到没有更多可供选择并返回一个空的 jquery 对象。应该很容易适应。
$('li a').click(function(){
$node = $(this).parent();
result = 0;
while ($node.length > 0){
result++;
$node = $node.prev();
}
alert(result);
return false;
});