如何将live dom元素数组转换为实时NodeList?

时间:2011-08-17 12:31:33

标签: javascript

例如我有这个数组对象:Object [object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement],[object HTMLDivElement]我需要将它更改为getElementsByTagName方法返回的一种值,但不将节点树中的节点移动到我的新节点列表中节点列表。我在数组中的html元素已经存在并且指向页面中的真实元素,因此例如添加事件会反映在页面中。

2 个答案:

答案 0 :(得分:2)

你误解了“实时”在NodeList的上下文中意味着什么。

Live NodeLists是可变长度的。它们可能一分钟包含3个节点,下一个节点包含17个节点。当您访问并迭代NodeList时,将重新评估子/父/兄弟关系以确定NodeList应包含哪些节点。

您无法将任意元素集转换为“实时”NodeList。它只是一组任意元素。

摘录自getElementsByTagName的Mozilla文档:

  

返回具有给定标记名称的元素的NodeList。搜索完整文档,包括根节点。返回的NodeList是实时的,这意味着它会自动更新以与DOM树保持同步,而无需再次调用document.getElementsByTagName。

答案 1 :(得分:1)

对于支持getElementsByClassName的浏览器,您可以为其他不相关的元素组分配类名,并使用document.getElementsByClassName(grouping-class)将它们收集到节点列表中。

它将跟踪添加的新元素(具有相同的类名)和从文档中删除的元素。