2010-07-12 55 views
1

我正在阅读关于HTML5的document。从我链接的地方开始的几行,将显示一个示例DOM树,用于给出示例HTML代码。为什么在<head>元素之前没有文本节点?为什么在DOCTYPE<html>节点之间没有文本节点?错误或功能?规范文档:DOM文本节点

回答

2

特征。主要的原因是,由于标记

<!DOCTYPE html> 
<html> 
<head> 
    <title>Sample page</title> 
..., 

一些人期望

document.documentElement.firstChild 

返回head元素。但是,如果包含文本节点,那就是将要返回的节点。

(注意,也即</body></html>之间的新生产线在body元素结束。)

+0

我很喜欢这个答案,因为你也注意到之后的额外CR。我也是,但当时不知道该怎么想。所以,这绝对可能是一个由于遗留原因而做出的决定(无证)。与此同时,该团体愿意在减少混淆的基础上对标准进行其他修改。很奇怪。我会让问题代表一点,这样我就可以弄清楚究竟发生了什么。如果你有兴趣,我还要求澄清http://www.w3.org/Bugs/Public/show_bug.cgi?id=10136 – TNi 2010-07-12 18:34:57

+1

编辑愿意改变规范以减少混淆,但只有当网页不依赖于特定行为时,以及浏览器供应商是否愿意实施更改。情况并非如此。 – Ms2ger 2010-07-13 16:51:05

0

<head>之前的文本节点可能是遗漏的。在根元素之前没有获得文本节点,因为大多数XML/HTML解析器无法处理根节点之外的元素,因此他们会默默忽略它们。如果您在那里添加评论或处理指令,也会发生同样的情况。

+0

我没有一个具体的例子,但我想像某些环境下是足够“智能”来过滤出“不相关”的文本,即非重要的空白。如果一个文本元素只包含微不足道的空白,那么对于一个实现来说它可能是合法的。作为一名开发人员,在发生这种情况时我通常很感激。 – 2010-07-12 10:07:41

+1

“”和“”之间的“CR”可以比“”和“”之间的“CR”更加显着或更低? – 2010-07-12 11:35:23

+1

我不得不同意亚伦。虽然和之间的CR对我来说是无用的,但其他一些CR的重要性同样重要。如果可能的话,我喜欢我的环境足够聪明以完全遵守标准。实际上,我记得IE和FF之间的文本节点的差异令我非常恼火。也就是说,我在http://www.w3.org/Bugs/Public/show_bug.cgi?id=10136上发布了关于该页面的评论以供澄清。感谢您的回应。 – TNi 2010-07-12 18:28:47