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";
}
}
}
这样说吧,你遍历完标签过后给每个标签添加一个事件,里面的this就是当前对象,你将下面的ali[i].index换成this.index或者直接用一个this都可以
我的理解:“ i “ 是变量,变量就涉及到作用域,作用域那么重要不用解释了。
我想ali[i].onmouseover=function(){} 是一个新函数,若你把ali[i] 或ali[i].index (含有未知变量i 的对象)放在这个新函数内,自然会是lia[i] is undefined。。。外层函数的变量 ”i “ 对新函数来说没有意义。除非你重新定义。
如果用了ali[i]那么再这个for循环中每一个ali集合的元素都会改变他的class,而你要的效果其实是只需要改变鼠标移动的这个标签
这段的逻辑就是在这个for循环里先把集合内所有ali集合内li标签的class改成空,这里要用ali[i],之后再改变鼠标点击或者移动的对象,这就是单独的对象,用的是this
ali[i].index代表的也不是一个单独的对象