JavaScript写选项卡

4 篇文章 0 订阅

效果图如下:

思路:

选项和内容用Tagname类似数组匹配
外层循环设置选项的index,若循环到触发了onclick事件的属性开始内层循环
内层循环把所有的选项和div设置成class="",class="hide"
最后把本标题和div设置成class="on",class=""
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>选项卡</title>
    <style>
        *{margin:0px;padding: 0px;font-size: 12px;}
        #SCard{
            width: 290px;
            height: 155px;
            margin: 20px;/*没用,我不想让它贴边而已*/
        }
        #SCard ul{
            height: 30px;
            display: block;
        }
        #SCard ul li{
            width: 70px;
            height: 28px;
            line-height: 28px;
            list-style: none;
            display: block;
            float: left;
            text-align: center;
            margin: 0 3px;
            border: 1px solid #336699;/*注意以下两行*/
            border-bottom: none;
        }
        #SCard ul li.on{                                        /*此处只用.on匹配不到?,必须有#SCard才能匹配*/
            border-top:2px solid #336699;
            border-bottom: 2px solid #fff;
        }
        #SCard div{
            height: 120px;
            width: 290px;
            border: 2px solid #000;
        }
        .hide{display: none;}
    </style>
    <script type="text/javascript">
        /*
        选项和内容用Tagname类似数组匹配
        外层循环设置选项的index,若循环到触发了onclick事件的属性开始内层循环
        内层循环把所有的选项和div设置成class="",class="hide"
        最后把本标题和div设置成class="on",class=""
         */
        window.onload=function () {
            var oSCard=document.getElementById("SCard");
            var oul=oSCard.getElementsByTagName("ul")[0];
            var oli=oul.getElementsByTagName("li");
            //返回HTMLCollection对象,此对象有length属性,nameItem()方法
            var odiv=oSCard.getElementsByTagName("div");
            var olen=oli.length;
            for(var i=0;i<olen;i++){
                oli[i].index=i;//.index向oli集合的每个对象添加index方法并赋值为i
                oli[i].onclick=function () {//.onclick向每个li标签添加点击事件
                    for(var n=0;n<olen;n++){
                        odiv[n].className="hide";
                        oli[n].className="";
                    }
                    this.className = "on";
                    odiv[this.index].className = "";
                }
            }
        }

    </script>
</head>
<body>
<div id="SCard">
    <ul>
        <li class="on">房产</li>
        <li>家居</li>
        <li>二手房</li>
    </ul>
    <div>
        275万购昌平邻铁三居 总价20万买一居<br>
        200万内购五环三居 140万安家东三环<br>
        北京首现零首付楼盘 53万购东5环50平<br>
        京楼盘直降5000 中信府 公园楼王现房<br>
    </div>
    <div class="hide">
        40平出租屋大改造 美少女的混搭小窝<br>
        经典清新简欧爱家 90平老房焕发新生<br>
        新中式的酷色温情 66平撞色活泼家居<br>
        瓷砖就像选好老婆 卫生间烟道的设计<br>
    </div>
    <div class="hide">
        通州豪华3居260万 二环稀缺2居250w甩<br>
        西3环通透2居290万 130万2居限量抢购<br>
        黄城根小学学区仅260万 121平70万抛!<br>
        独家别墅280万 苏州桥2居优惠价248万<br>
    </div>
</div>
</body>
</html>

1.document.getElementsByTagName()返回值是HTMLCollection对象,有length属性和namedItem()方法(用name特性获取集合中的项),使该对象可以按索引,按值访问。

2.上面代码向HTMLCollection对象添加了index属性

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值