li的index问题

来源:10-1 编程挑战

Zhou_Fan

2019-02-03 22:33

<script type="text/javascript">

window.onload = function(){

        var _tab = document.getElementById("tabs");

        var _ul = _tab.getElementsByTagName("ul")[0];

        var _li = _ul.getElementsByTagName("li");

        var _div = _tab.getElementsByTagName("div");

        for(var i = 0; i < _li.length; i++){

            //不太明白这个index是干嘛的,是每个标签元素都固有的属性吗?

            //为什么下面 this.className不能用_li[i].className代替? this.index不能用i代替呢?

            _li[i].index = i;

            //给li循环绑定onclick()函数

            _li[i].onclick=function(){

                    //先把所有li的样式去掉

                    for(var j = 0; j < _li.length; j++){

                        _li[j].className = "";

                        _div[j].className = "hide";

                    }

                    //然后把当前的li设置成on并把hide取消(变成显示状态)

                    this.className = "on";

                    _div[this.index].className = "";

        }

    }

}

</script>

问题如上注释,请不吝赐教。

写回答 关注

2回答

  • 慕后端6191217
    2019-02-14 17:47:20

    也是刚开始学,我猜想 oLis[i].onclick = function() {..} 这里使用了匿名函数,对于oLis[i] 而言,保留下来的之后之前的oLis[i].index = i;  真正点击运行的时候 才会调用oLis[i].index 得到具体的index,如果用j的话,等到具体调用的时候大概j已经变成 li.length了。 (从“匿名函数,”后面开始,都是猜的)

  • qq_慕少2504550
    2019-02-13 16:49:58

    还js中for循环是瞬间执行完的(比如,一个 j=0,j<=10,的循环,j永远是10),所以你如果使用j每次循环的值,那么你就得在一个单独的地方将值保存下来使用,或者使用自执行函数

    for(.....){ 
        (function(i){ 
            //这里的i,就是每次循环的实际的值了 
        })(i) 
    }


JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题