问答详情
源自:10-1 编程挑战

我想问下,第二个循环把每个li的样式设为空,每个div设为hide,那么后面把当前li样式设为on,其他li的样式呢?刚刚不是全设空了么,还是说这个 className = “” 对默认的样式无效?

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

                 

                 oLis[i].index = i;                     


                 oLis[i].onclick = function() {

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

                         oLis[n].className = "";       

                         oDivs[n].className = "hide";   

                     }

                     this.className = "on";             

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

                 }

             }

         }

    </script>


提问者:溯梦随风 2016-07-23 15:37

个回答

  • qq_二冬_0
    2016-07-26 23:28:34
    已采纳

    #tabs ul li{
          background:#fff;
          cursor:pointer;
          float:left;
          list-style:none;
          height:28px;
          line-height:28px;
          margin:0px 3px;
          border:1px solid #aaaaaa;
          border-bottom:none;
          display:inline-block;
          width:60px;
          text-align: center;
        }
        #tabs ul li.on{
          border-top:2px solid saddlebrown;
          border-bottom: 2px solid #fff;
        }

    在原CSS里是对li标签设置了两次样式,第一次设置的是基本样式,这也就是你说的在class属性为空的时候为什么出现样式的原因。第二次是对class属性值为“on”的li标签设置了样式,这也就是实现切换的关键,在你点击了li标签后,他会先清除所有的li的class属性值,在为你点击的这个li标签设置一个class=on,这样就造成了只有你点击的里标签会有第二个样式。

    你也可以这么理解,每一个li标签比喻成一个门,

    1、先把所有门涂成红色(#tabs ul li{样式一});

    2、为打开的门贴一个贴纸(#tabs ul li.on{样式二});,但是你并不知道那个门是开的。

    3、这个时候,你要去检查有没有门开了(遍历li标签),先把所有门上的贴纸都拿下来(可能有也可能没有)(oLis[n].className = ""; )然后如果你如果发现有门打开了(onclick)了,就可以对他贴一个贴纸(应用样式2了。)



  • 梦的离殇3704687
    2016-07-25 19:08:05

    你可以每次循环的时候先循环一次把所有的样式都加上,然后再根据点击消除不需要的样式,这样就解决你的问题了,保证每次只消失一个样式

  • 慕函数9642432
    2016-07-24 08:46:50

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

                             oLis[n].className = "";       

                             oDivs[n].className = "hide";   

                         }

    该句代码意思为把所有的li标签的类名设置为空,div的类名设置为隐藏

    this.className = "on";             

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

    这两句代码意思为把当前li标签的类名设置为on,div标签的类名设置为空;

    但是其他的li标签和div标签的类型都没有改变,依然是li标签的类名为空,div的类名为隐藏。


    只是个人理解,希望可以帮助到你~~