这是一个很好的学术问题。我想知道浏览器是如何实现的,比如使用什么数据结构或算法将CSS选择器映射到特定的DOM元素。它是通过哈希表实现的吗?DOM子节点如何知道应用于父节点的样式也适用于它自己,等等。我一直在寻找Mozilla开发人员中心,但没有找到任何东西。任何关于这一主题的文献或书籍都将不胜感激。谢谢!
发布于 2009-11-01 05:13:34
匹配回答的问题是“哪些选择器匹配给定的节点”,而不是“哪些节点匹配某个选择器”。这使您可以简单地根据当前节点评估选择器的每个部分(比较节点名称/ID/类)。Decendant combinator和继承是通过扫描父节点来完成的。
如果你对接下来发生的事情感兴趣,WebKit博客有一个很好的系列:WebCore rendering basics
发布于 2009-11-01 07:39:22
下面是一些稀缺的文档:
从你的问题看,似乎你应该首先了解更多关于CSS应该如何工作的知识(例如,什么是规则特异性,计算风格)。
发布于 2009-11-01 05:45:50
你提到了Mozilla。与所有可能的实现的抽象概念相比,在特定的具体实现的上下文中回答您的问题肯定更容易。
使用什么数据结构或算法将CSS选择器映射到特定的DOM元素...它是通过哈希表实现的吗?
我想,对于FF2来说,你的问题的直接答案很可能在火狐源代码的style directory中。在该目录中搜索"hashtable"会得到111个文件。
我确信哈希表广泛地与呈现CSS样式所涉及的一些过程相关联。
因此,对您的问题的简短回答是,“是的,但它不仅仅是哈希表。”
https://stackoverflow.com/questions/1655625
复制相似问题