访问HTMLCollection / NodeList中的每个元素

时间:2013-08-14 15:14:45

标签: javascript dom

我想在实时HTMLCollection或NodeList中访问每个元素(仅使用JavaScript,不使用jQuery或任何其他JavaScript库),例如var elements = document.getElementsByClassName('class-name');返回的集合

如果DOM没有改变,那么我可以用for循环来执行此操作:

for(var i=0; i<elements.length; i++)
{
    //Do something with elements[i]
}

但是当for循环仍然在运行并且添加或删除具有类class-name的元素时,该怎么做。如果已删除或添加element,则索引将更改。

那么,我如何确保在for循环运行时,element中的elements仅使用JavaScript而错过。

3 个答案:

答案 0 :(得分:3)

在给定时间只运行一个脚本。在脚本运行时,DOM可能发生的唯一更改是脚本生成的更改。所有其他任务,事件等都会耐心等待您的脚本完成执行。

所以

  • 不用担心DOM的外部更改,没有
  • 跟踪代码所做的更改

你会没事的。

答案 1 :(得分:0)

据我所知,for循环不是异步的,因此元素不能改变,因为for循环在更改发生之前完全执行d,或者更改应该在for循环之前发生。

答案 2 :(得分:0)

“直播”系列只是让人惊讶的尴尬。我建议你只使用querySelectorAll,它不仅比gEBCN更受支持,而且返回快照而不是“实时”集合。

我看到即使是这个集合是“现场”的概念也会造成混乱。它不是现场,但基本上属性是吸气剂,例如[i]实际调用.item(i) - 该方法会动态检索使集合显示为实时的元素。

还有更多。有些人继续使用这些方法,因为他们错误地认为由于基准测试破坏它们的速度要快得多。在这些基准测试中,只比较直接方法调用,并且在您尝试检索元素之前,不认为“实时”集合不会执行任何工作。