Js中获取元素索引遇到的问题

问题描述:点击超链接,想要获取每个超链接的索引,但是获取的都是一个固定的值

HTML代码

 <div>
      <a href="javascript:;">11</a>
      <a href="javascript:;">22</a>
      <a href="javascript:;">33</a>
      <a href="javascript:;">44</a>
      <a href="javascript:;">55</a>
 </div>

Js代码

<script>
      var allA=document.querySelectorAll("a");
      for (var i = 0; i < allA.length; i++) {
        allA[i].onclick = function () {
          console.log(i)//每点击一次获取的都是5
        };
      }
</script>

产生的原因:此程序执行的顺序是先执行for循环,在执行单击响应函数,当执行单击响应函数时,for循环已经执行完了,此时i的值已经变为5,所以每次打印的i都为5.


解决方案1:添加如下代码2行代码

allA[i].num = i;
console.log(this.num);

完整js代码

 <script>
      var allA = document.querySelectorAll("a");
      for (var i = 0; i < allA.length; i++) {
          //为每一个超链接添加一个num属性(num---随便命名)
        allA[i].num = i;
        allA[i].onclick = function () {
          //   console.log(i);
          //获取超链接的索引
          console.log(this.num); //打印0,1,2,3,4
        };
      }
</script>

解决方案2利用闭包解决
将执行代码写到立即执行函数内

(function (i) {
          allA[i].onclick = function () {
            console.log(i); //每点击一次获取的都是5
          };
        })(i);
<script>
  var allA=document.querySelectorAll("a");
  for (var i = 0; i < allA.length; i++) {
    (function(i){
      allA[i].onclick = function () {
      console.log(i)//每点击一次获取的都是5
    };
    })(i)
  }
</script>

解决方案3 利用ES6 let声明变量完美解决

<script>
     let allA=document.querySelectorAll("a")
     for (let i = 0; i < allA.length; i++) {
        allA[i].onclick = function () {
          console.log(i);//每点击一次获取的都是5
        };
      }
</script>

解决方案4 ES5新增方法each()

<script>
     let allA=document.querySelectorAll("a")
     allA.forEach(function(items,index){
       items.onclick=function(){
         console.log(index)
       }
     }) 
</script>

推荐使用第三种或第四种方案,简单易操纵
这时就可以获取超链接的索引了,!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值