天天看点

一个关于this的例子

<script>

window.οnlοad=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;

console.log(this.index)//此处显示的是undefined因为此时并没有触发事件,所以根本没有this

oDivs[this.index].className=' '

}

}

</script>

正确:

<!DOCTYPE html>

<html >

<head>

<meta http-equiv="Content-Type" content="charset=utf-8" /> 

<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.8.0.min.js"></script>

<title>Document</title>

<style type="text/css">

*{margin: 0px;padding: 0px}

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

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

#tabs ul li{background: #fff;cursor: pointer;display: inline-block;float: left; list-style: none; border-bottom:none;height: 28px; 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 black;border-top: none; padding: 5px;}

.hide{display: none;}

</style>

    <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++){

                // 通过for循环,先把每一个li绑上click事件

                 oLis[i].index = i;//!

                 oLis[i].onclick = function() {    //这一就可以

                    // 在li的click事件中,通过for循环遍历每一个div元素,将每一个div元素的class加上hide,然后再将每一个li的class:on去掉

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

                         oLis[n].className = "";

                         oDivs[n].className = "hide";

                     }

                     // 最后,在当前的li遍历中,将此li加上class,此div去掉class

                     this.className = "on";

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

                     // 注意this.index

                 }

             };

         }

</script>

</head>

<body>

<div id="tabs">

    <ul>

        <li >房产</li>

        <li class="on">居住</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万 二环稀缺2居250w甩<br>

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

        黄城根小学学区仅260万 121平70万抛!<br>

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

    </div>

</div>

</body>

</html>

弄错的原因是没有搞懂事件的流程,写代码的时候没有记清事件的逻辑,而是跳跃性的凭借影响和记忆。