DOM NodeList(例如由element.getElementsByTagName返回)是一个有趣的对象,因为它不是快照,而是反映了在创建NodeList之后对文档所做的更改。
我想知道如何实现这样一个集合:完全懒惰的评估必须非常缓慢,但保持缓存版本一致需要在内部进行大量的簿记。
我试图谷歌搜索关于这个主题的博客文章,并试图找到Mozilla的相关源代码文件,但是找不到任何东西(当我立刻找不到东西时,我来到这里......)。
那么Firefox,Safari,Internet Explorer(以及其他非浏览器DOM实现)如何处理NodeLists?
答案 0 :(得分:1)
对于.NET的XML库,XmlNodeList有3个内部子类,具有不同的策略。 XmlNode.ChildNodes属性的XmlChildNodes集合使用基于对其包含元素的引用的简单延迟评估。当DOM更改时,XmlElementList使用事件侦听器。第三个XPathNodelList用于XPath查询(例如,XmlNode.SelectNodes()),并在每次访问其索引时读取XPath,读取其Count属性,或者迭代它。