Sou iniciante em Javascript.
Estou iniciando uma página da web através do window.onload
, tenho que encontrar um monte de elementos por seu nome de classe ( slide
) e redistribuí-los em nós diferentes com base em alguma lógica. Tenho uma função Distribute(element)
que pega um elemento como entrada e faz a distribuição. Eu quero fazer algo assim (conforme descrito, por exemplo, aqui ou aqui ):
var slides = getElementsByClassName("slide");
for(var i = 0; i < slides.length; i++)
{
Distribute(slides[i]);
}
no entanto, isso não faz a mágica para mim, porque getElementsByClassName
na verdade não retorna array, mas um NodeList
, que é ...
... esta é minha especulação ...
... sendo alterado dentro da função Distribute
(a árvore DOM está sendo alterada dentro desta função, e a clonagem de certos nós acontece). For-each
a estrutura do loop também não ajuda.
Os slides variáveis agem de forma realmente desdeterminista, através de cada iteração, ele muda o comprimento e a ordem dos elementos descontroladamente.
Qual é a maneira correta de iterar por meio de NodeList no meu caso? Eu estava pensando em preencher algum array temporário, mas não tenho certeza de como fazer isso ...
EDITAR:
fato importante que esqueci de mencionar é que pode haver um slide dentro do outro, isso é realmente o que muda a slides
variável como acabei de descobrir graças ao usuário Alohci .
A solução para mim foi clonar cada elemento em uma matriz primeiro e passar a matriz ono-por-um para Distribute()
depois.
Distribute()
função é muito longa e complexa para ser copiada aqui, mas tenho certeza de que estou alterando a estrutura do DOM dentro, também estou duplicando (clonando) elementos lá. Quando eu depuro, posso ver as slides
mudanças de variáveis sempre que é passado para dentro.
getElementsByClassName()
retorna um live nodeList
, então como os elementos com essa classe são adicionados, o comprimento do nodeList
over no qual você está iterando as alterações.