tab选项卡

414 阅读1分钟
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin:0px;
            padding:0px;
        }
        #tabNav{
            /* 清楚子集元素浮动对其的影响 */
            overflow:hidden;
        }
        #tabNav li{
            list-style: none;
            width: 100px;
            height: 40px;
            border:1px solid red;
            float: left;
            text-align: center;
            line-height: 40px;
        }
        #tabNav .active{
            background-color: red;
        }
        #wrap div{
            width: 406px;
            height: 200px;
            /* 把元素隐藏 */
            display: none;
        }
        #wrap .show{
            display: block;
            border:1px solid red;
        }
    </style>
</head>
<body>
    <ul id="tabNav">
        <li class="active">话费</li>
        <li>旅行</li>
        <li>车险</li>
        <li>游戏</li>
    </ul>
    <div id="wrap">
        <div class="show">
            话费
        </div>
        <div>
            旅行
        </div>
        <div>
            车险
        </div>
        <div>
            游戏
        </div>
    </div>
    <script>
        // 需求:点击指定li时,li变成选中样式,其他li回复默认,让对应的div标签显示出来,其他的div标签隐藏

        // 事件编程:1.事件源 2.事件 3.事件处理函数

        // 通过id先找到所有li的父级元素
        var tabNav=document.getElementById("tabNav");
        // 通过父级元素找到所有子集的li,并放入数组中
        var tabNavLis=tabNav.getElementsByTagName("li");

        // 找到所有的div元素并放入数组中
        var wrap=document.getElementById("wrap");
        var wrapDivs=wrap.getElementsByTagName("div");

        //利用循环遍历数组,给每个元素添加事件
        for(var n=0;n<tabNavLis.length;n++){
            //由于需要知道当前点击的li是第几个li,所有利用挖我曾循环分发事件的同时,给每个li分发一个位置属性
            tabNavLis[n].index=n;
            tabNavLis[n].onclick=function(){
                // 利用排他思想现将所有的li类名清空
                for(var j=0;j<tabNavLis.length;j++){
                    tabNavLis[j].className="";
                }
                // 给选中的div加上指定的类名
                this.className="active";

                // 利用排他思想,先将所有的div类名清空
                for(var j=0;j<wrapDivs.length;j++){
                    wrapDivs[j].className="";
                }
                // 让指定的div加上显示的类名
                wrapDivs[this.index].className="show";
            }
        }
    </script>
</body>
</html>