Soy un principiante de Javascript.
Estoy ingresando a la página web a través de window.onload
, tengo que encontrar un montón de elementos por su nombre de clase ( slide
) y redistribuirlos en diferentes nodos según la lógica. Tengo una función Distribute(element)
que toma un elemento como entrada y realiza la distribución. Quiero hacer algo como esto (como se describe, por ejemplo, aquí o aquí ):
var slides = getElementsByClassName("slide");
for(var i = 0; i < slides.length; i++)
{
Distribute(slides[i]);
}
sin embargo, esto no me hace la magia, porque en getElementsByClassName
realidad no devuelve una matriz, sino a NodeList
, que es ...
... esta es mi especulación ...
... se cambia dentro de la función Distribute
(el árbol DOM se cambia dentro de esta función y se produce la clonación de ciertos nodos). For-each
La estructura de bucle tampoco ayuda.
Las diapositivas variables actúan de manera no determinista, a través de cada iteración cambia su longitud y orden de los elementos de manera salvaje.
¿Cuál es la forma correcta de iterar a través de NodeList en mi caso? Estaba pensando en llenar una matriz temporal, pero no estoy seguro de cómo hacerlo ...
EDITAR:
Un hecho importante que olvidé mencionar es que puede haber una diapositiva dentro de otra, esto es en realidad lo que cambia la slides
variable como acabo de descubrir gracias al usuario Alohci .
La solución para mí fue clonar cada elemento en una matriz primero y pasar la matriz uno por uno Distribute()
después.
Distribute()
función es demasiado larga y compleja para copiarla aquí, pero estoy seguro de que estoy cambiando la estructura DOM interna, también estoy duplicando (clonando) elementos allí. Cuando lo depuro, puedo ver que la variable slides
cambia cada vez que se pasa al interior.
getElementsByClassName()
devuelve un live nodeList
, por lo que a medida que los elementos con esa clase se agregan, la longitud nodeList
sobre la que está iterando cambia.