JS笔记(4) 选项卡案例

HTNL+CSS基础结构

 <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul {
            list-style: none;
        }

        .box {
            width: 350px;
            margin: 20px auto;
        }

        .box ul {
            display: flex;
        }

        .box ul li {
            border: 1px solid rgb(172, 172, 172);
            padding: 5px 20px;
            margin-right: 20px;
            font-size: 16px;
            color: rgb(172, 172, 172);
            cursor: pointer;
        }

        .box ul li.active {
            border-bottom-color: #fff;
            color: chocolate;
        }

        .box div {
            display: none;
            border: 1px solid rgb(172, 172, 172);
            padding: 20px 25px;
            margin-top: -1px;
            font-size: 14px;
            color: rgb(136, 136, 136);
        }

        .box div.active {
            display: block;
        }
    </style>
复制代码
 <div id="box" class="box">
        <ul>
            <li class="active">三花</li>
            <li>英短</li>
            <li>奶牛</li>
        </ul>
        <div class="active">三花猫(Three Felinae),别名猫咪、家猫、野猫、土猫。是猫类的一种,世界各地均有分布。所谓的三花猫就是身上有 黑 、红(橘)和白三种颜色的猫,故名为三色猫。</div>
        <div>英国短毛猫,体形圆胖,四肢粗短发达,毛短而密,头大脸圆,温柔平静,对人友善,极易饲养</div>
        <div>所谓奶牛猫就是平时所说的黑白花。因为看起来像奶牛,所以就这么叫。 奶牛猫是普通的家猫(中华田园土猫种),都是属于杂交血统。</div>
    </div>
复制代码

一、方案一:定点清除

思路:

  • 1.获取原相关元素
  • 2.存储li元素第一项
  • 3.循环所有li元素,当点击li元素时,把当前点击元素的上一项元素的类名清除,再给当前点击元素添加相应类名
  • 4.给每一项li设置自定义属性:目的是让其对应的div元素能够通过myIndex属性值 进行相关操作
        const lis = document.querySelectorAll('#box>ul>li');
        const divs = document.querySelectorAll('#box>div');
        
        let first = lis[0]; //
        for (let i = 0; i < lis.length; i++) {
            lis[i].myIndex = i
            //给每一项li设置自定义属性:目的是让其对应的div元素能够通过myIndex属性值 进行相关操作
            // console.log(lis[i].myIndex) // 0 1 2
            lis[i].onclick = function () {
                first.className = ''; //当点击lis元素的第一项时,把第一项的类名清空
                this.className = 'active'; //把当前点击的那一项lis[i]加上类名
                
                divs[first.myIndex].className = '';
                divs[i].className = 'active'
                
                first = this; // 让当前点击的那一项变成下次点击的上一个
            };
        };

复制代码
  • 当点击第一项时: first = lis[0] i=0 first.myIndex=0,即把第一项li和div类名删除 再把第一项类名加上 此时:first = 当前点击项即第一项
  • 当点击第二项时: first = lis[0] i=1 first.myIndex=1,即把第一项li和div类名删除 再把第二项类名加上 此时:first = 当前点击项即第二项
  • 当点击第三项时: first = lis[0] i=2 first.myIndex=2,即把第二项li和div类名删除 再把第三项类名加上 此时:first = 当前点击项即第三项

二、方案二:大清洗

思路:

  • 1.获取原相关元素
  • 2.存储li元素第一项
  • 3.循环所有li元素,当点击li元素时,把所有li和div的类名都删除然后给当前点击的元素添加类名
  • 4.给每一项li设置自定义属性:目的是让其对应的div元素能够通过myIndex属性值 进行相关操作
        var liList = document.querySelectorAll('#box>ul>li');
        var divList = document.querySelectorAll('#box>div');

        for (var i = 0; i < liList.length; i++) {
            liList[i].myIndex = i
            liList[i].onclick = function () {
                for(var k = 0;k<liList.length;k++){ 
                    liList[k].className = '';
                    divList[k].className = '';
                };
                this.className = 'active';
                divList[this.myIndex].className = 'active';
            };
        };

复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值