dom - NodeList是如何实现的?

标签 dom data-structures nodelist

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

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

我尝试用谷歌搜索有关该主题的博客文章,也尝试查找 Mozilla 的相关源代码文件,但无法立即找到任何内容(当我无法立即找到某些内容时,我就来到这里...)。

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

最佳答案

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

关于dom - NodeList是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/300794/

相关文章:

javascript - 如何在给定的偏移量处获取 HTML 字符串中的父元素?

javascript - 检测 Javascript 中字体平滑设置的变化

Javascript 无需 jQuery 即可获取 X 父节点

javascript - 对形状进行分组和取消分组的最佳数据结构是什么

c - c中的可用内存问题删除了链表中的某些值

dom - 如何获取节点列表中每个元素的 innerHTML

javascript - 操作 querySelectorAll 元素而不循环遍历 NodeList

javascript - remove 和 .append() 将元素返回到其原始状态

jquery - 使用 jQuery 读取 xml

c++ - 错误 : cannot convert parameters from 'int [10]' to 'int'