Obtener elementos (colección dinámica y colección estática)

Inserte la descripción de la imagen aquí

Si quiero usar un bucle para vaciar el elemento li en ul, lo primero que pensamos es obtener directamente todo el li y eliminarlo en un bucle.

Pero diferentes métodos de obtención de elementos li conducirán a diferentes resultados.

<!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>

Supongamos que utilizo el siguiente método para obtener elementos y eliminarlos cíclicamente:

    <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>

El resultado es este: ¡
Inserte la descripción de la imagen aquí
lo mismo que piensas!

De todos modos, es diferente de lo que pensaba (quería borrarlo todo);

¿Por qué? ? ?

Utilice getElementsBy para obtener una colección dinámica. Cuando se elimina un elemento, la posición del elemento en la colección y la longitud de la colección cambiarán.

Por ejemplo, cuando se elimina el primer elemento, los siguientes elementos avanzan, el segundo elemento se convierte en el primero y la longitud de la colección se reduce en uno.

Como resultado, solo se eliminaron los nodos singulares.

¿Cómo resolver este problema? ?

Se puede obtener el método Document.querySelector

La colección de elementos obtenidos por este método es estática, y la posición de los elementos en la colección no cambiará ya que los elementos dentro se eliminan del dom, y la longitud también es fija.

    <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>

Después de esto, todos los elementos li en ul se pueden eliminar en un bucle virtual

Supongo que te gusta

Origin blog.csdn.net/weixin_45773503/article/details/113368216
Recomendado
Clasificación