使用原生js给每个li绑定onclick点击事件,输出每条li的下标(索引)的几种方式

使用原生js给每个li绑定onclick点击事件,输出每条li的下标(索引)

htm部分

    <ul>
        <li>11111</li>
        <li>22222</li>
        <li>33333</li>
        <li>44444</li>
        <li>55555</li>
    </ul>

首先需要获取页面中每一条li节点

    var lis=document.querySelectorAll('li');

1、通过设置属性方式 给每一条li设置属性index为i, 点击时就可以获取this的index属性。

    for(var i=0;i<lis.length;i++){
        lis[i].index=i;
        lis[i].onclick=function(){
              console.log(this.index);
        }
    }

2、通过设置自定义属性方式, 给每一条li设置自定义属性index为i, 点击时就可以获取this的自定义属性index,同上面方法相似。

    for(var i=0;i<lis.length;i++){
        lis[i].setAttribute('index',i);
        lis[i].onclick=function(){
              console.log(this.getAttribute('index'));
        }
    }

3、通过bind改变this指向为每一条li,传入第二个参数为i,在点击时就可以获取到i。

    for(var i=0;i<lis.length;i++){
        lis[i].onclick=function(i){
              console.log(i,this);
        }.bind(lis[i],i);
    }

4、通过通过闭包自执行函数方式 ,传入参数i,在函数内容返回一个函数体 赋值给每一条点击的li。

    for(var i=0;i<lis.length;i++){
        //自执行函数把i作为实参,传递进去了,在内层函数进行使用
        lis[i].onclick=(function(index){
           // 每个事件都构成了一个闭包,每个闭包里都有一个自己的iindex
            return function(){
                console.log(index);
            }
        })(i);
    }

5、通过let 的块级作用域特点 获取到的是每个独立的i。

    for(let i=0;i<lis.length;i++){
        lis[i].onclick=function(){
              console.log(i);
        }
    }

6、通过数组forEach方式 无论箭头函数还是普通函数都能拿到index

    lis.forEach(function(item,index){
        item.onclick=function(){
            console.log(index);
        }
    })
    lis.forEach(function(item,index){
        item.onclick=()=>{
            console.log(index);
        }
    })
    lis.forEach((item,index)=>{
        item.onclick=()=>{
            console.log(index);
        }
    })

以上内容为自己整理,如有问题评论区欢迎讨论学习

posted @ 2020-06-08 19:37  sunhuan欢  阅读(3779)  评论(0编辑  收藏  举报