文档树和DOM是相同的吗?

11

这是原句:

伪类的概念被引入,允许基于文档树之外或不能使用其他简单选择器表达的信息进行选择。

来自http://www.w3.org/TR/selectors/#pseudo-classes

"document tree"在这里指的是DOM吗?还是其他东西?


文档树是DOM的一部分。DOM包含整个文档对象模型 - 例如像定时器(setTimeout)和XMLHttpRequest这样的API是DOM的一部分,但不是文档树的一部分。文档树实际上代表您呈现的良好文档的部分。 - Benjamin Gruenbaum
2个回答

12
是的。
DOM是文档对象模型的缩写,描述了构成(HTML)文档的元素的树形结构。
CSS规范中提到的文档树指的是同样的东西。
在你引用的这句话中,文件说明信息(比如一个链接是否被访问过)没有存储在 DOM 节点中。
看一下这张 Firebug 检查器的截图,它显示了这个问题的一部分 DOM 和 DOM 属性。 Firebug: Document tree excerpt of this question showing the link to the W3C docs and the DOM properties pane 在 CSS 中,你可以创建这个选择器并应用样式到已被访问过的链接:
a:visited {
    ...
}

在DOM节点中,JavaScript无法访问visited属性,因此此信息位于DOM树之外


基本上,根据其他答案,“文档树”是XML/HTML DOM的超类,所以答案可以是肯定的。但是DOM也可以应用于其他语言,而那些其他语言没有文档树? - Wolfpack'08
1
@Wolfpack'08:当然,其他编程语言也可能有文档树,但这取决于(标记)语言。基本上,并不是每个可以表示为树形结构的数据结构都是“文档对象树”:例如,程序代码(Java、Javascript、Python、C等)可以表示为树形结构,但将其描述为“_形成_文档”的“_对象_”有点奇怪——这些结构被称为AST(抽象语法树)。 - try-catch-finally

4
为了在HTML中使用CSS,无论你将其称为文档树还是DOM树都没有太大的区别。作为一名使用HTML和CSS的作者,你只需要知道树是以HTML标记的元素结构。
DOM(文档对象模型)是一组API,通过它可以访问和修改HTML或XML文档的元素。严格来说,DOM本身并不是文档树(或者说不是一个文档树),而是该树的接口(尽管该树本身可以按照DOM实现)。请参见DOM规范中的什么是文档对象模型?进行详细解释。
此外,文档树不一定由DOM表示或与之交互,因为CSS可以用于样式化除HTML或XML DOM树之外的其他内容。DOM仅提供了“文档树”的一个实现概念。这就是为什么选择器规范(和相关规范)从未将文档树称为“DOM”或“DOM树”,除非特别指明DOM标准。
然后,根据CSS的定义,“文档树”可以在CSS2.1规范中找到:
文档树:源文档中编码的元素树。此树中的每个元素都有一个父元素,唯一的例外是根元素,它没有父元素。
当源文档语言是HTML或XML,使用的实现是DOM时,生成的文档树是DOM树。

我有几个不同意的理由。主要是直接与你所说的相矛盾:DOM是XML DOM的缩写,它扩展到(据我所知),所有支持CSS的类HTML语言。另外,更多的是修辞上的问题:你的来源似乎有些牵强(它是W3,而不是CSS,并且你引用的定义中没有任何限制文档树为HTML)。W3也将DOM指定为XML DOM。我不是专家。 - Wolfpack'08
@Wolfpack'08:是的,我知道我必须直接提到XML而不仅仅是HTML,所以我已经修复了。不过,我对你的修辞有些困惑。 - BoltClock
@Wolfpack'08:嗯...因为CSS是W3C标准?为什么会奇怪呢?另一方面,说“W3C CSS”将是多余的。CSS可以被任何人用于任何语言的实现,但这并不改变CSS本身仍然是W3C标准的事实。 - BoltClock
1
@Wolfpack'08:啊,好的。CSS确实是一种语言。然而,这种语言是由其规范(简称“规范”)所规定的。这个规范是一个作品;它由W3C CSS工作组的作者维护。你可以引用作品的标题或作者的名字(或两者都可以)。在我的情况下,我选择引用作品,因为说出引文来自哪里或什么更有意义,而不是谁写的。 - BoltClock
DOM被设计用于与任何编程语言一起使用。为了提供精确的、与语言无关的DOM接口规范,我们选择在对象管理组(OMG)IDL [OMG IDL]中定义规范,如CORBA 2.3.1规范[ CORBA]中所定义的那样。除了OMG IDL规范外,我们还为Java [Java]和ECMAScript [ECMAScript](一种基于JavaScript [JavaScript]和JScript [JScript]的行业标准脚本语言)提供语言绑定。- http://www.w3.org/TR/DOM-Level-3-Core/introduction.html - Wolfpack'08

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接