我想在实时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而错过。
答案 0 :(得分:3)
在给定时间只运行一个脚本。在脚本运行时,DOM可能发生的唯一更改是脚本生成的更改。所有其他任务,事件等都会耐心等待您的脚本完成执行。
所以
你会没事的。
答案 1 :(得分:0)
据我所知,for循环不是异步的,因此元素不能改变,因为for循环在更改发生之前完全执行d,或者更改应该在for循环之前发生。
答案 2 :(得分:0)
“直播”系列只是让人惊讶的尴尬。我建议你只使用querySelectorAll
,它不仅比gEBCN更受支持,而且返回快照而不是“实时”集合。
我看到即使是这个集合是“现场”的概念也会造成混乱。它不是现场,但基本上属性是吸气剂,例如[i]
实际调用.item(i)
- 该方法会动态检索使集合显示为实时的元素。
还有更多。有些人继续使用这些方法,因为他们错误地认为由于基准测试破坏它们的速度要快得多。在这些基准测试中,只比较直接方法调用,并且在您尝试检索元素之前,不认为“实时”集合不会执行任何工作。