获取元素(动态集合和静态集合)

在这里插入图片描述

如果我想利用循环将 ul 中的 li 元素清空,我们最先想到的是直接获取所有的 li 循环遍历删除即可。

但是获取 li 元素的方法不同会导致结果不同

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        li {
     
     
            background-color: aqua;
        }
    </style>
</head>

<body>
    <ul>
        <li>li1</li>
        <li>li2</li>
        <li>li3</li>
        <li>li4</li>
        <li>li5</li>
        <li>li6</li>
        <li>li7</li>
        <li>li8</li>
        <li>li9</li>
        <li>li10</li>
    </ul>
</body>

</html>

假如我使用如下方式获取元素,并循环删除:

    <script>
        var ul = document.getElementsByTagName('ul')[0];
        var lis = document.getElementsByTagName("li");
        for (var i = 0; i < lis.length; i++) {
     
     
            ul.removeChild(lis[i]);
        }
    </script>

结果是这样的:
在这里插入图片描述
跟你想的一样嘛!

反正跟我想的不一样(我是想把它删光的);

为啥呢???

使用getElementsBy获得的是一个动态集合,当删去了一个元素时,集合中的元素位置,集合长度都会发生变化

例如删掉第一个元素时,后面元素前移,第二个元素成为第一个,集合长度减一

所以导致只有单数节点被删除了。

要如何解决这个问题呢??

document.querySelector 方法获取即可

使用这种方法获取的元素集合式静态的,不会随着里面元素再dom中删除而元素在集合中的位置改变,length也是固定的。

    <script>
        var ul = document.querySelector('ul');
        // 使用querySelect获得的是静态集合
        var lis = document.querySelectorAll("ul li");
        for (var i = 0; i < lis.length; i++) {
     
     
            ul.removeChild(lis[i]);
        }
    </script>

如此之后就可以虚循环删除 ul 中所有的 li 元素了

猜你喜欢

转载自blog.csdn.net/weixin_45773503/article/details/113368216