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

来源:10-1 编程挑战

fighting加油吧

2016-10-24 18:24

 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";

            }

        }

        

    }


写回答 关注

3回答

  • 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代表的也不是一个单独的对象

    wagaha...

    下面的aDiv之所以用ali[i].index是因为这个函数是用在li标签上的,对鼠标操作的反应也是在li上的,下面用这个方法的功能是为了让div区域和li标签一一对应,因为下面的div在body里也是有顺序的

    2016-10-24 19:21:29

    共 1 条回复 >

JavaScript进阶篇

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

468060 学习 · 21891 问题

查看课程

相似问题