问答详情
源自:10-1 编程挑战

什么时候用this,为什么用ali[i].index就不行

 window.onload=function(){

        var oDiv=document.getElementById("tab-list");

        var aDiv=oDiv.getElementsByTagName("div");

        var oul1=document.getElementById("ul1");

        var ali=oul1.getElementsByTagName("li");

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

            ali[i].index=i;

            ali[i].onmouseover=function(){

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

                    ali[i].className="";

                }

                this.className="active";

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

                    aDiv[j].className="hide";

                }

                aDiv[ali[i].index].className="show";

            }

        }

        

    }


提问者:fighting加油吧 2016-10-24 18:24

个回答

  • qq_凉风有信丶_03837837
    2016-10-28 16:03:48
    已采纳

    这样说吧,你遍历完标签过后给每个标签添加一个事件,里面的this就是当前对象,你将下面的ali[i].index换成this.index或者直接用一个this都可以

  • 六士
    2016-11-06 18:34:36

    我的理解:“  i “ 是变量,变量就涉及到作用域,作用域那么重要不用解释了。

    我想ali[i].onmouseover=function(){} 是一个新函数,若你把ali[i] 或ali[i].index (含有未知变量i 的对象)放在这个新函数内,自然会是lia[i]  is  undefined。。。外层函数的变量 ”i “ 对新函数来说没有意义。除非你重新定义。


  • wagahai
    2016-10-24 19:08:35

    如果用了ali[i]那么再这个for循环中每一个ali集合的元素都会改变他的class,而你要的效果其实是只需要改变鼠标移动的这个标签

    这段的逻辑就是在这个for循环里先把集合内所有ali集合内li标签的class改成空,这里要用ali[i],之后再改变鼠标点击或者移动的对象,这就是单独的对象,用的是this

    ali[i].index代表的也不是一个单独的对象