继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

编程练习5-原生JS实现选项卡功能

小谢星
关注TA
已关注
手记 10
粉丝 16
获赞 148
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编程练习5-原生JS实现选项卡功能</title>
    <style type="text/css">
         *{
            font:12px normal "microsoft yahei";
         }
         ul{
            margin: 0;
            padding: 0;
            border-bottom:2px solid #8B4513;
            width:300px;    
            height: 32px;
         }
         li{
            list-style-type: none;
            height: 30px;
            line-height: 30px;
            margin-left: 5px; 
         }
         /*头部按钮选择
         border-bottom:2px solid #FFFFFF!important;
         1、增加border-bottom是为了覆盖父容器ul的下边框:li的下边框是能够覆盖ui的下边框区域的
         2、!important是为了提高css的优先级,发现.active优先级不如li[name="tabs"]
         */
         .active{
            border-top:2px solid #8B4513!important;
            border-bottom:2px solid #FFFFFF!important;
        }
        /*标签头部按钮样式*/
        li[name="tabs"]{
            width: 60px;
            border: 1px solid #999;
            cursor: pointer;
            float:left;
            text-align: center; 
        }
        /*内容区域显示*/
        .show{
            display: block;
        }
        /*内容区域隐藏*/
        .hide{
            display: none;
        }
        /*内容区域默认样式*/
        .content{
            border:1px solid #4A78A6;
            border-top: none;
            width: 298px;
            height: 150px;
        }

    </style>
    <script type="text/javascript">
        window.onload = function(){     
             var tabs = document.getElementsByName("tabs");
             var contents = document.getElementsByName("content");
             for (var i = 0,len=tabs.length;i < len; i++) {
                tabs[i].index = i;//注意这一句,这个i是不能正确传递到onclick里面的,原因???,所以将它附加给tabs[i]对象
                tabs[i].onclick = function(){
                    for (var j = 0; j < len; j++) {
                        tabs[j].className = "";
                        contents[j].className = "hide";
                    }
                    this.className="active";
                    contents[this.index].className="show content";
                }
             }
         }
    </script>
</head>
<body>
    <ul>
        <li name="tabs" class="active">房产</li>
        <li name="tabs">家具</li>
        <li name="tabs">二手房</li>
    </ul>
    <ul name="content" class="show content">
        <li name="contentLi">275万购昌平邻铁三居 总价20万买一居</li>
        <li name="contentLi">200万内购五环三居 140万安家东三环</li>
        <li name="contentLi">北京首现零首付楼盘 53万购东5环50平</li>
        <li name="contentLi">京楼盘直降5000 中信府 公园楼王现房</li>
    </ul>
    <ul name="content" class="hide content">
        <li name="contentLi">40平出租屋大改造 美少女的混搭小窝</li>
        <li name="contentLi">经典清新简欧爱家 90平老房焕发新生</li>
        <li name="contentLi">新中式的酷色温情 66平撞色活泼家居</li>
        <li name="contentLi">瓷砖就像选好老婆 卫生间烟道的设计</li>
    </ul>
    <ul name="content" class="hide content">
        <li name="contentLi">通州豪华3居260万 二环稀缺2居250w甩</li>
        <li name="contentLi">西3环通透2居290万 130万2居限量抢购</li>
        <li name="contentLi">黄城根小学学区仅260万 121平70万抛!</li>
        <li name="contentLi">独家别墅280万 苏州桥2居优惠价248万</li>
    </ul>
</body>
</html>
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

//注意这一句,这个i是不能正确传递到onclick里面的,原因???,所以将它附加给tabs[i]对象

如果单纯在onclick中调试i的话,会发现i永远是3,而拿不到0---2。
这是因为,tabs[i].onclick = function(){,数组的每一项的onclick都是一个函数实例(Function对象),这个函数实例会产生一个闭包域,这个闭包域引用了外部的变量,外部函数的私有变量i一旦变化,闭包域中的i也相应发生变化。所以会获取到3.

查看全部评论