4

DOM NodeList(例如由 element.getElementsByTagName 返回)是一个有趣的对象,因为它不是快照,而是反映了在创建 NodeList 之后对文档所做的更改。

我想知道如何实现这样的集合:完全懒惰的评估一定非常慢,但保持缓存版本的一致性需要在内部进行大量的簿记。

我尝试在 google 上搜索有关该主题的博客文章,并尝试查找 Mozilla 的相关源代码文件,但无法立即找到任何内容(当我无法立即找到内容时,我会来这里...)。

那么 Firefox、Safari、Internet Explorer(和其他非浏览器 DOM 实现)如何处理 NodeList?

4

1 回答 1

1

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

于 2008-11-19T02:48:07.830 回答