为了账号安全,请及时绑定邮箱和手机立即绑定

求解答: this的使用场景 (代码在<script></script>之间)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>实践题 - 选项卡</title>
    <style type="text/css">
     /* CSS样式制作 */ 
    body {
        margin: 0;
        padding: 100px;

    } 
    .clearfix:before,
    .clearfix:after {
        content: "";
        display: block;
        height: 0;
        visibility: hidden;
        clear: both;

    }
    ul {
        list-style:none;
        padding: 0;
        margin: 0;
    } 
    li {
        float: left;
        padding: 5px 10px;
        margin-right: 5px;
        border: solid 1px #DDD;
        border-bottom: none;
        cursor: pointer;
    }
    .tab-on {
        border-top: 2px solid purple;
        border-bottom: 2px solid white;

    } 
    .tab-content {
        width: 280px;
        border: 1px solid black;
        border-top: 2px purple solid;
        padding: 10px 10px 20px;
        height: 100px;
        margin-top: -2px;
    }
    .hide{
        display: none;
    }
    
       
    </style>


   <script type="text/javascript">
            
   // JS实现选项卡切换
       window.onload = function () {
           tab();    
       }
       function tab() {
           var li = document.getElementsByTagName("li");
           var tabContent = document.getElementsByClassName("tab-content")[0];
           var div = tabContent.getElementsByTagName("div");
           for ( var i = 0; i < li.length; i ++) {
               li[i].index = i;
               li[i].onclick = function () {
                   //this.index = i;        //什么时候用this ??????????,这里跟上面的声明有什么不一样
                   for(var j = 0; j < li.length; j ++) {
                       li[j].className = "";
                       div[j].className = "hide";
                   }
                   this.className = "tab-on"; //这里用了this,指li[i] 对吧
                   div[this.index].className = "";

               }
           }
       }

           
   </script>
    
 
</head>
<body>
<!-- HTML页面布局 -->
    <ul>
        <li>房产</li>
        <li>家居</li>
        <li>二手房</li>
    </ul>
    <section>
        <div>
            <p>
                275万购昌平邻铁三居 总价20万买一居<br>
                200万内购五环三居 140万安家东三环<br>
                北京首现零首付楼盘 53万购东5环50平<br>
                京楼盘直降5000 中信府 公园楼王现房
            </p>
        </div>
        <div>
            <p> 
                40平出租屋大改造 美少女的混搭小窝<br>
                经典清新简欧爱家 90平老房焕发新生<br>
                新中式的酷色温情 66平撞色活泼家居<br>
                瓷砖就像选好老婆 卫生间烟道的设计
            </p>
        </div>
        <div>
            <p>
                通州豪华3居260万 二环稀缺2居250w甩<br>
                西3环通透2居290万 130万2居限量抢购<br>
                黄城根小学学区仅260万 121平70万抛<br>
                独家别墅280万 苏州桥2居优惠价248万
            </p>
        </div>
    </section>

 
</body>
</html>


正在回答

1 回答

为什么要在for循环给每个li绑定点击事件时使用this,这里首先涉及到js代码块的加载顺序问题.

js加载的时候,首先找到全局中的变量以及定义的函数名并分配内存,然后第二遍再去分别找变量和函数名中的内容进行赋值,加载顺序我也不太清楚,同学可以取百度下js加载的执行顺序进行了解

关键在for循环中绑定点击事件时候,li[i].onclick在js第一次加载的时候并不会去看绑定的匿名函数中的内容,而只是知道这个li有个绑定事件方法,等到有调用的时候它才去看的.如果用i来表示的话,并不会像我们想的那样有一一对应的值的.所以这个一一对应的值我们就用li[i].index = i来表示,每个li就有特定的index索引值了.并且绑定事件里面的函数也无法再li[i]表示当前的这个li了.

然后这个时候this就派上用场啦,它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,this指的是,调用函数的那个对象,详细有关this的说明同学业可以度娘,我也是度娘跟你说的可以看这个,http://www.jb51.net/article/41656.htm

解答就到这里,主要就是明白js加载执行的时候是怎么执行的.在某些情况执行的时候无法很好的表示当前的对象,用this表示,比如在<a onclick="ha(this)"></a>还有就是上面for循环中每个点击事件

1 回复 有任何疑惑可以回复我~
#1

OscarK 提问者

非常感谢你
2016-11-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

求解答: this的使用场景 (代码在<script></script>之间)

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号