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