JavaScript在ul中找到li索引

时间:2013-08-18 04:21:49

标签: javascript html indexing html-lists

我正试图在Javascript中通过id找到我的列表项的索引。例如,我有5个项目的列表,并给出一个元素,我想弄清楚它在列表中的位置。下面是我希望建立的代码。

它使用onclick处理程序来查找正在工作的元素,然后我只需要以某种方式找出列表'squareList'中元素的位置。

window.onload=function(){
    function getEventTarget(e){
        var e=e || window.event;
        return e.target || e.srcElement;
    }

    function selectFunction(e){
        var target=getEventTarget(e);
        alert(target.id);
    }

    var squareList=document.getElementById('squareList');
    squareList.onclick=function(e){
        selectFunction(e);
    }
}

5 个答案:

答案 0 :(得分:11)

要获取索引,您可以执行以下操作:

Array.prototype.indexOf.call(squareList.childNodes, target)

使用jQuery,因为您已经在使用跨浏览器的解决方法:

$(document).ready(function() {
    $('#squareList li').click(function() {
        var index = $(this).index();
    })
});

答案 1 :(得分:1)

我还有另一种解决方案,想分享

function getEventTarget(e) {
  e = e || window.event;
  return e.target || e.srcElement; 
}

let ul = document.getElementById('squareList');
ul.onclick = function(event) {
  let target = getEventTarget(event);
  let li = target.closest('li'); // get reference by using closest
  let nodes = Array.from( li.closest('ul').children ); // get array
  let index = nodes.indexOf( li ); 
  alert(index);
};

您可以验证https://github.com/chezou/tabula-py/issues/216#issuecomment-581837621

参考:here

答案 2 :(得分:1)

使用es6和findIndex

将ul节点列表转换为数组:[...UL_ELEMENT.children] 然后使用findIndex检查要查找的元素。

const index = [...UL_ELEMENT.childNodes].findIndex(item => item === LI_ELEMENT)

答案 3 :(得分:0)

您可以在列表或数组中获取所有“li”,然后使用简单循环搜索位置

答案 4 :(得分:0)

使用展开运算符 [...] 将 ul 元素的子元素转换为数组,然后使用 Array.prototype.indexOf() 方法将子元素作为参数传递。

jar xf tiles-jsp-3.0.8.jar