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

求助大神,有地方不是很懂

<!doctype html>

<html>

<head>

<meta charset="utf-8">

<title>无标题文档</title>

<style type="text/css">

*{padding:0px;margin:0px;font:12px normal "microsoft yahei"}

#tabs{width:290px;padding:5px;height:150px;margin:20px;}

#tabs ul{list-style:none;display:block;height:30px;line-height:30px; border-bottom:2px saddlebrown solid;}

#tabs ul li{background:#fff;cursor:pointer;float:left;list-style:none;height:28px;line-height:28px;margin:0px 3px;border:1px solid #aaa;border-bottom:none;display:inline-block;width:60px;text-align:center;}

#tabs ul li.on{border-top:2px solid saddlebrown;border-bottom:2px solid #fff;}

#tabs div{height:120px;line-height:25px;border:1px solid #336699; border-top:none;padding:5px;}

.hide{display:none;}

</style>

</head>


<body>

<div id="tabs">

<ul>

<li class="on">房产</li>

<li>家居</li>

<li>二手房</li>

</ul>

<div>

275万购昌平邻铁三居 总价20万买一居<br>

    200万内购五环三居 140万安家东三环<br>

    北京首现零首付楼盘 53万购东5环50平<br>

    京楼盘直降5000 中信府 公园楼王现房<br>

</div>

<div class="hide">

40平出租屋大改造 美少女的混搭小窝<br>

      经典清新简欧爱家 90平老房焕发新生<br>

      新中式的酷色温情 66平撞色活泼家居<br>

      瓷砖就像选好老婆 卫生间烟道的设计<br>

</div>

<div class="hide">

通州豪华3居260万 二环稀缺250w甩<br>

      西3环通透2居290万 130万限量抢购<br>

      黄城根小学学区仅260万 12170万抛!<br>

      独家别墅280万 苏州桥2居优价248万<br>

</div>

</div>

</body>


<script type="text/javascript">

window.onload=function(){

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

var oUl=oTab.getElementsByTagName("ul")[0];

var olis=oUl.getElementsByTagName("li");

var oDivs=oTab.getElementsByTagName("div");

for(var i=0,len=olis.length;i<len;i++){

olis[i].index=i;

olis[i].onclick=function(){

for(var n=0;n<len;n++){

olis[n].className="";

oDivs[n].className="hide";

}

this.className="on";

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

};

}

}

系统提供的这段javascript代码中 olis[i].index=i;和oDivs[this.index].className="";不是很理解。后面的this.index 为什么不能用 i 代替


提问者:JonyY 2018-08-23 14:24

个回答

  • qq_within_iktxy9
    2018-08-26 21:43:39
    已采纳

    1. var声明的i 没有块级作用域 , 当i的值发生变化时 ,无法在变量对象中存储多个阶段的值 , 所以变量对象在各个循环阶段只产生一个i ,这个i随着循环会不断更新 .

    2. 事件是异步执行的,事件驱动时(即函数调用),会去找事件绑定时(阶段)的变量,发现不存在此阶段的i变量,所以向后找到已经更新的i , 导致结果发生错乱 ; 利用添加obj.index属性来保存各个阶段的i变量来达到目的