JS中getElementByClassName的坑

今天写东西练手的时候发现,使用getElementByClassName的时候,如果对元素的ClassName进行修改,那么数组的长度会发生变化。废话不说先看代码。

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        body {
            height: 100%;
            width: 100%;
        }
        
        .nav-list{
            position: absolute;
            top:0px;
            left:0px;
            width: 200px;
            height:100%;
            background: rgb(85, 85, 97);
        }

        .nav-list .nav-title {
            text-align: center;
            background:rgb(21, 21, 31);
            color: white;
            margin:0px;
            padding:7px;
        }
        .nav-list ul{
            padding:0px;
            margin:0px;
        }
        .nav-list ul li{
            list-style-type: none;
        }
        .nav-list ul li h3{
            color:white;
            margin:2px;
            background:rgb(139, 173, 211);
            text-align:center;
            padding:6px;
        }

        .hide{
            margin:0px;
            transition: 1s;
            display: none;
        }
        .on{
            margin:0px;
            transition: 1s;
            
        }

        .nav-list ul li h5{
            text-align: center;
            color: white;
            display: block;
            margin:2px;
            background:rgb(128, 141, 214);
            padding:5px;
            
        }
    </style>
</head>

<body>
    <div class="nav-list">
        <h3 class="nav-title">Title</h3>
        <ul>
            <li>
                <h3 class="subtitle">subtitle</h3>
                <div class="hide">
                    <h5>1</h5>
                    <h5>1</h5>
                    <h5>1</h5>
                    <h5>1</h5>
                </div>
            </li>
            <li>
                <h3 class="subtitle"  >subtitle</h3>
                <div class="hide">
                    <h5>1</h5>
                    <h5>2</h5>
                    <h5>3</h5>
                    <h5>4</h5>
                    <h5>5</h5>
                </div>
            </li>
        </ul>
    </div>
    <script>
        let subtitle=document.querySelectorAll(".subtitle");
        for(let i=0;i<subtitle.length;i++)
        {
            subtitle[i].index=i;
        }
        let obj=[];
        let hide=document.getElementsByClassName("hide");
        for(let i=0;i<hide.length;i++)
        {
            obj[i]=hide[i];
            hide[i].index=i;
        };

//利用闭包实现的绑定
        // for(var i=0;i<subtitle.length;i++)
        // {
            
        //     (function(n){
        //         subtitle[n].onclick=function(){
        //             alert(n);
        //         }
        //     })(i);

        // }
//利用块级作用域实现的半丁
alert(hide.length);
for(let i=0;i<subtitle.length;i++)
{
    subtitle[i].onclick=function()
    {
        hide[i].className="on";
        alert("当前数组长度"+hide.length);
    }
}
       
    </script>
</body>

</html>

具体情况就不说了,大致就是侧边栏有两个按钮,点击时绑定了事件,对应隐藏的部分会修改类名进行显示同时提示当前使用getElementByClassName获得的数组长度。

数组长度为1       数组长度为2

后经查询得知使用querySelectAll得到的是静态元素集合,而使用其他方法得到的则是动态的NodeList,是会随着元素变化而发生删减的。

后经过测试最后得到确认上述的结论是正确的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值