13

这是一个相当学术的问题。我想知道浏览器是如何实现的,因为使用什么数据结构或算法将 CSS 选择器映射到特定的 DOM 元素。它是通过哈希表完成的吗?DOM 子节点如何知道应用于父节点的样式也适用于自身等。我一直在查看 Mozilla 开发人员中心并没有找到任何东西。任何有关该主题的文档或书籍将不胜感激......谢谢!

4

4 回答 4

10

匹配回答问题“哪些选择器匹配给定节点”,而不是“哪些节点匹配选择器”。这使您可以简单地根据当前节点评估选择器的每个部分(比较节点名称/ID/类)。后代组合子和继承是通过扫描父节点来完成的。

如果你对接下来会发生什么感兴趣,WebKit 博客有很好的系列:WebCore 渲染基础

于 2009-10-31T21:13:33.947 回答
2

所以这里是稀缺的文档:

从您的问题看来,您似乎应该首先了解更多有关 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 回答
1

W3C 从定义的角度提供了一种通用的方法,我觉得它提供了丰富的信息:

于 2013-08-22T04:30:46.220 回答