请教一下大神!

来源:10-1 编程挑战

Scny

2016-01-03 12:42

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>实践题 - 选项卡</title>
    <style type="text/css">
     /* CSS样式制作 */  
     *{margin:0;padding:0;font:normal 12px "微软雅黑";color:#000000;}
     ul{list-style-type: none;}
     a{text-decoration: none;}

     #tab-list{width: 275px;height:190px;margin: 20px auto;}

     #ul1{border-bottom: 2px solid #8B4513;height: 32px;}
     #ul1 li{display: inline-block;width: 60px;line-height: 30px;text-align: center;border: 1px solid #999;border-bottom: none;margin-left: 5px;}
     #ul1 li:hover{cursor: pointer;}
     #ul1 li.active{border-top:2px solid #8B4513;border-bottom:2px solid #FFFFFF;}

     #tab-list div{border: 1px solid #7396B8;border-top: none;}
     #tab-list div li{height: 30px;line-height: 30px;text-indent: 8px;}
     
     .show{display: block;}.hide{display: none;}
    </style>
    <script type="text/javascript">
         
    window.onload = function() {
        var oUl1 = document.getElementById("ul1");
        var aLi = oUl1.getElementsByTagName("li");
        var oDiv = document.getElementById("tab-list");
        var aDiv = oDiv.getElementsByTagName("div");
        for(var i = 0; i < aLi.length; i++) {
            aLi[i].index = i;
            aLi[i].onmouseover = function() {
                for(var i = 0; i < aLi.length; i++) {
                    aLi[i].className = "";
                }
                this.className = "active";
                for(var j = 0; j < aDiv.length; j++) {
                    aDiv[j].className = "hide";
                }
                aDiv[this.index].className = "show";
            }        
        }
    }
    
    
    </script>
 
</head>
<body>
<!-- HTML页面布局 -->
<div id="tab-list">
    <ul id="ul1">
        <li>房产</li><li>家居</li><li>二手房</li>
    </ul>
    <div>
        <ul>
            <li><a href="javascript:;">275万购昌平邻铁三居 总价20万买一居</a></li>
            <li><a href="javascript:;">200万内购五环三居 140万安家东三环</a></li>
            <li><a href="javascript:;">北京首现零首付楼盘 53万购东5环50平</a></li>
            <li><a href="javascript:;">京楼盘直降5000 中信府 公园楼王现房</a></li>
        </ul>
    </div>    
    <div>
        <ul>
            <li><a href="javascript:;">40平出租屋大改造 美少女的混搭小窝</a></li>
            <li><a href="javascript:;">经典清新简欧爱家 90平老房焕发新生</a></li>
            <li><a href="javascript:;">新中式的酷色温情 66平撞色活泼家居</a></li>
            <li><a href="javascript:;">瓷砖就像选好老婆 卫生间烟道的设计</a></li>
        </ul>
    </div>    
    <div>
        <ul>
            <li><a href="javascript:;">通州豪华3居260万 二环稀缺2居250w甩</a></li>
            <li><a href="javascript:;">西3环通透2居290万 130万2居限量抢购</a></li>
            <li><a href="javascript:;">黄城根小学学区仅260万 121平70万抛!</a></li>
            <li><a href="javascript:;">独家别墅280万 苏州桥2居优惠价248万</a></li>
        </ul>
    </div>
</div>

 
</body>
</html>

我就想问下

aLi[i].className = ""
this.className = "active"
aDiv[this.index].className = "show"

这三个代码 将className的值分别设为空,active,show。这样做的意义何在?

请大神教一下,感谢!

写回答 关注

2回答

  • 堂堂堂堂糖糖糖童鞋
    2016-01-03 14:09:36
    已采纳

    首先,你注意到上面的CSS样式中的“show”,"active","hide"了吗?上面的三行代码都是在,为元素动态添加CSS样式,或把元素的CSS样式清空,本来是静态的CSS代码,当和JavaScript结合起来,就可以动态的为元素添加我们想要的CSS样式了。

    其次,就是一下,那三行代码的作用,以及在文档中的效果:

    第一、二行代码,作用清空所有id为ul1的样式,也就是其class属性,使用开发者工具可以看到具体的效果,当你进行切换标签时:

    原来的:

    <ul id="ul1"><li>房产</li><li>家居</li><li>二手房</li> </ul>

    切换时的:

    http://img.mukewang.com/5688ba530001ea3d02470077.jpg

    第三行代码,作用是,显示div或隐藏div,用到的css样式:

    .show{display: block;}.hide{display: none;}

    具体的效果是:
    http://img.mukewang.com/5688baf20001ca2d03090258.jpg

    看到div中的class属性的值了吗?那都是通过JavaScript动态添加的!

    堂堂堂堂糖糖... 回复堂堂堂堂糖糖...

    你可以在这段代码aDiv[this.index].className = "show";之前alert(i),就可以看到效果,所以当我们点击的时候,并没有找到索引为3的div,因为这段js代码并不是 我们点击的时候才去执行的,而是在文档加载时,所以索引i的值就永远都是3了,当我们点击其中的某一个li时,就不会找到对应的div,因为索引为3的div不存在,我们想通过点击当前元素,就获取当前元素的索引,这也是aLi[i].index = i;的原因,因为i的值已经改变了,所以才那样做的,也是为了获取当前点击的元素对应的div,通过this.index索取当前点的li的索引!

    2016-01-04 10:57:28

    共 5 条回复 >

  • Scny
    2016-01-04 18:55:11

    回复 小小小小小小童鞋:嗯嗯 ,你说的我大概懂了。不过我发现个东西,就是我把aLi[i].index = i;这个去掉以后,然后运行这个代码,你会发现aLi[i].onmouseover = function() {

                    for(var i = 0; i < aLi.length; i++) {

                        aLi[i].className = "";

                    }

                    this.className = "active";

                    for(var j = 0; j < aDiv.length; j++) {

                        aDiv[j].className = "hide";

                    }

    这一大段代码都会执行,而唯独aDiv[this.index].className = "show"这段代码没有执行


    Scny

    所以我个人觉得index这个属性并不是集合的下标属性,而是与下标类似的索引,是要另外添加的属性

    2016-01-04 19:00:53

    共 1 条回复 >

JavaScript进阶篇

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

468788 学习 · 22582 问题

查看课程

相似问题