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>
问题如上注释,请不吝赐教。
也是刚开始学,我猜想 oLis[i].onclick = function() {..} 这里使用了匿名函数,对于oLis[i] 而言,保留下来的之后之前的oLis[i].index = i; 真正点击运行的时候 才会调用oLis[i].index 得到具体的index,如果用j的话,等到具体调用的时候大概j已经变成 li.length了。 (从“匿名函数,”后面开始,都是猜的)
还js中for循环是瞬间执行完的(比如,一个 j=0,j<=10,的循环,j永远是10),所以你如果使用j每次循环的值,那么你就得在一个单独的地方将值保存下来使用,或者使用自执行函数
for(.....){ (function(i){ //这里的i,就是每次循环的实际的值了 })(i) }
JavaScript进阶篇
468060 学习 · 21891 问题
相似问题