如何在不更改DOM的情况下获取javascript中的标记位置

How to get tag location in javascript without changing the DOM

本文关键字:javascript 获取 位置 情况下 DOM      更新时间:2023-09-26

假设我有以下代码:

<body>
  <a>1</a>
  <a>2</a>
</body>
<script>
var as = document.getElementByTagName('a');
for(var i=1; i<=as.length; i++) {
  as[i].onclick = function(){
    alert(i);
  }
}
</script>

当我点击任何一个a标签时,它会提醒2!我知道为什么,但我该怎么通过呢?

需要添加一些闭包来保存i的值,因为在循环完成并且i的值改变之后,将调用onlick函数

as[i].onclick = (function(i2){
    return function(){
        alert(i2);
    };
})(i);

这是一个作用域问题。您的for循环将在注册任何单击之前完成,因此i将始终为2。您可以通过使用功能性forEach循环来避免这种情况,该循环将保留您的范围:

var as = document.getElementsByTagName('a');
[].forEach.call(as, function (el, i) {
  el.onclick = function(){
    alert(i);
  }
})

这将为您提供html中标记的当前位置,您可以使用以下代码:

$('a').on('click',function(){
console.log($(this).index());
});