这是一个相当学术的问题。我想知道浏览器是如何实现的,因为使用什么数据结构或算法将 CSS 选择器映射到特定的 DOM 元素。它是通过哈希表完成的吗?DOM 子节点如何知道应用于父节点的样式也适用于自身等。我一直在查看 Mozilla 开发人员中心并没有找到任何东西。任何有关该主题的文档或书籍将不胜感激......谢谢!
问问题
3939 次
4 回答
10
匹配回答问题“哪些选择器匹配给定节点”,而不是“哪些节点匹配选择器”。这使您可以简单地根据当前节点评估选择器的每个部分(比较节点名称/ID/类)。后代组合子和继承是通过扫描父节点来完成的。
如果你对接下来会发生什么感兴趣,WebKit 博客有很好的系列:WebCore 渲染基础
于 2009-10-31T21:13:33.947 回答
2
所以这里是稀缺的文档:
- http://www.mozilla.org/newlayout/doc/style-system.html
- https://developer.mozilla.org/en/Mozilla_Style_System
从您的问题看来,您似乎应该首先了解更多有关 CSS 应该如何工作的信息(例如,什么是规则特异性、计算样式)。
于 2009-10-31T23:39:22.037 回答
1
你提到了Mozilla。在特定具体实现的上下文中回答您的问题肯定更容易,而不是所有可能实现的抽象概念。
[W] 使用什么数据结构或算法将 CSS 选择器映射到特定的 DOM 元素……它是通过哈希表完成的吗?
我想你的问题的直接答案,对于 FF2,很可能在firefox 源代码的style 目录中。在该目录中搜索“hashtable”会产生 7 个文件中的 111 个结果。
我相信哈希表与渲染 CSS 样式所涉及的一些过程广泛相关。
所以你的问题的简短回答是,“是的,但它不仅仅是哈希表。”
于 2009-10-31T21:45:49.740 回答