我是Javascript初学者。
我是通过初始化网页的window.onload
,我必须按类名(slide
)查找一堆元素,然后根据某种逻辑将它们重新分配到不同的节点中。我有一个函数Distribute(element)
,将一个元素作为输入并进行分配。我想做这样的事情(例如在此处或此处概述的示例):
var slides = getElementsByClassName("slide");
for(var i = 0; i < slides.length; i++)
{
Distribute(slides[i]);
}
但这对我getElementsByClassName
没有任何帮助,因为它实际上并不返回数组,而是一个NodeList
,即...
这是我的推测
...正在函数内部更改Distribute
(DOM树正在此函数内部更改,并且某些节点发生了克隆)。For-each
循环结构也无济于事。
变量滑块的行为实际上是不确定的,通过每次迭代,它会疯狂地更改其长度和元素顺序。
在我的情况下,迭代NodeList的正确方法是什么?我当时正在考虑填充一些临时数组,但不确定如何做到这一点...
编辑:
我忘了提到的一个重要事实是,其中可能有一张幻灯片,而实际上正是slides
由于用户Alohci而改变了变量,正如我刚刚发现的那样。
对我来说,解决方案是先将每个元素克隆到数组中,然后再将数组一个接一个地传递Distribute()
。
Distribute()
函数是冗长而复杂的,可以在此处复制,但是我可以确定我正在更改内部的DOM结构,同时也在其中复制(克隆)元素。当我调试它时,我可以看到变量slides
每次在内部传递时都会发生变化。
getElementsByClassName()
返回live nodeList
,因此,随着该类的元素被添加nodeList
,您迭代更改的长度就增加了。