Javascript 获取元素编号或为其设置标识符

Javascript 获取元素编号或为其设置标识符,javascript,jquery,Javascript,Jquery,我有一个用HTML动态修改的列表。像这样: <ol> <li>Some value<li> <li>another</li> <li>more</li> <li>more<li> <li>more</li> </ol> 一些价值 另一个 更多 更多 更多 我想做的是,当用户单击列表中的某个元素时,我想调用一个函数并传递一个数值参

我有一个用HTML动态修改的列表。像这样:

<ol>
  <li>Some value<li>
  <li>another</li>
  <li>more</li>
  <li>more<li>
  <li>more</li>
</ol>

  • 一些价值
  • 另一个
  • 更多
  • 更多
  • 更多
  • 我想做的是,当用户单击列表中的某个元素时,我想调用一个函数并传递一个数值参数,该参数表示该
  • 相对于父
    的偏移量

    我该怎么做


    我正在使用jQuery。

    结合使用
    on()
    (用于绑定最小事件处理程序并处理您提到的动态更新)和
    index()
    方法来确定元素相对于其父元素的索引

    $("ol").on("click", "li", function() {
        yourFunction($(this).index());
    });
    


    如果您没有jQuery

    var ol = document.querySelector("ol");
    var olLi = ol.querySelectorAll("li");
    var handleClick = function(e) {
        var target = e.target;
        var index = 0;
    
        while (target = target.previousElementSibling) {
            index++;   
        }
    
        yourFunction(index);
    
    };
    
    ol.addEventListener("click", handleClick);
    
    var ol = document.getElementsByTagName("ol")[0];
    var olLi = ol.getElementsByTagName("li");
    var handleClick = function(e) {
        e = e || window.event;
        var target = e.target || e.srcElement;
        var index = 0;
    
        while (target = target.previousSibling) {
            (target.nodeType == 1) && (index++);   
        }
    
        yourFunction(index);
    
    };
    
    ol.addEventListener && ol.addEventListener("click", handleClick);
    ol.attachEvent && ol.attachEvent("onclick", handleClick);
    


    如果您必须支持没有jQuery的旧浏览器

    var ol = document.querySelector("ol");
    var olLi = ol.querySelectorAll("li");
    var handleClick = function(e) {
        var target = e.target;
        var index = 0;
    
        while (target = target.previousElementSibling) {
            index++;   
        }
    
        yourFunction(index);
    
    };
    
    ol.addEventListener("click", handleClick);
    
    var ol = document.getElementsByTagName("ol")[0];
    var olLi = ol.getElementsByTagName("li");
    var handleClick = function(e) {
        e = e || window.event;
        var target = e.target || e.srcElement;
        var index = 0;
    
        while (target = target.previousSibling) {
            (target.nodeType == 1) && (index++);   
        }
    
        yourFunction(index);
    
    };
    
    ol.addEventListener && ol.addEventListener("click", handleClick);
    ol.attachEvent && ol.attachEvent("onclick", handleClick);
    
    .

    您可以为此使用.index()

    var selectedIndex = $("#yourID").index() + 1;
    

    这是从1开始的指数

    哦,好吧,那太快了。谢谢。我不确定OP是否希望他们的索引1为基础。是的,但OP没有提到这是一个要求。