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

时间:2013-02-28 04:39:45

标签: javascript jquery

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

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

我想要做的是,当用户点击该列表中的某个元素时,我想调用一个函数并传递一个数字参数,该参数表示该<li>相对于父项的偏移量<ol>

我该怎么做?

我正在使用jQuery。

2 个答案:

答案 0 :(得分:5)

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

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

jsFiddle


如果你没有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);

jsFiddle


如果你不得不支持没有jQuery的旧浏览器......

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);

jsFiddle

答案 1 :(得分:0)

你可以使用.index()。

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

以下是从{1>开始的索引的Link