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

来源:10-1 编程挑战

OscarK

2016-11-16 18:47

<!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回答

  • qq_在迷宫_0
    2016-11-16 19:43:35
    已采纳

    为什么要在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循环中每个点击事件

    OscarK

    非常感谢你

    2016-11-18 00:26:07

    共 1 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

469418 学习 · 22585 问题

查看课程

相似问题