Dom 节点列表是如何实现的?

Dom 节点列表是如何实现的?,dom,data-structures,nodelist,Dom,Data Structures,Nodelist,DOM节点列表(例如通过element.getElementsByTagName返回)是一个有趣的对象,因为它不是快照,而是反映在创建节点列表后对文档所做的更改 我想知道如何实现这样一个集合:完全懒惰的计算速度肯定非常慢,但保持缓存版本的一致性需要大量的内部簿记 我试着在谷歌上搜索关于这个主题的博客文章,也试着找到Mozilla的相关源代码文件,但没有立即找到任何东西(当我不能立即找到一些东西时,我就来这里…) 那么Firefox、Safari、Internet Explorer(以及其他非浏览

DOM节点列表(例如通过element.getElementsByTagName返回)是一个有趣的对象,因为它不是快照,而是反映在创建节点列表后对文档所做的更改

我想知道如何实现这样一个集合:完全懒惰的计算速度肯定非常慢,但保持缓存版本的一致性需要大量的内部簿记

我试着在谷歌上搜索关于这个主题的博客文章,也试着找到Mozilla的相关源代码文件,但没有立即找到任何东西(当我不能立即找到一些东西时,我就来这里…)


那么Firefox、Safari、Internet Explorer(以及其他非浏览器DOM实现)如何处理节点列表呢?

对于.NET的XML库,XmlNodeList有3个内部子类,它们采用不同的策略。XmlChildNodes集合用于XmlNode.ChildNodes属性,使用基于对其包含元素的引用的简单惰性计算。XmlElementList在DOM更改时使用事件侦听器。第三个是XPathNodeList,用于XPath查询(例如,XmlNode.SelectNodes()),并在每次访问XPath的索引、读取其Count属性或迭代XPath时对其求值