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

我想问下,第二个循环把每个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>


正在回答

4 回答

#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了。)



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

溯梦随风 提问者

你好,按你说的就是说className这个属性设空只能清除曾经用过className添加的样式而不能清除本来的基础样式(门涂红色)?
2016-07-27 回复 有任何疑惑可以回复我~
#2

qq_二冬_0 回复 溯梦随风 提问者

对的。就是说你清空className之后,CSS里对应的选择器就选择不到标签了,实现的效果就是选择有类名的这个选择器选择不到标签,不会应用样式,但是选择li标签的选择器仍会应用样式
2016-07-31 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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的类名为隐藏。


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

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

溯梦随风 提问者

嗯,就是这样,这时候其他的Li标签如果是空的话,那么就是没样式了吧,可是效果显示有的哦
2016-07-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信