【问题标题】:Specification Document: DOM Text Nodes规范文档:DOM 文本节点
【发布时间】:2011-03-14 17:37:09
【问题描述】:

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

【问题讨论】:

    标签: dom html specifications


    【解决方案1】:

    功能。主要原因是,鉴于标记

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

    有些人期待

    document.documentElement.firstChild
    

    返回head 元素。但是,如果包含文本节点,则将返回该节点。

    (还要注意,&lt;/body&gt;&lt;/html&gt; 之间的新行以 body 元素结尾。)

    【讨论】:

    • 我非常喜欢这个答案,因为您还注意到 之后的额外 CR。我也这样做了,但当时不知道该怎么想。因此,这绝对可能是出于遗留原因做出的决定(未记录?)。同时,该集团愿意在让事情变得不那么混乱的基础上,对标准进行其他修改。很奇怪。我要让这个问题稍等一下,这样我才能确切地弄清楚发生了什么。如果您有兴趣,我还要求澄清w3.org/Bugs/Public/show_bug.cgi?id=10136
    • 编辑愿意更改规范以减少混乱,但前提是网页不依赖特定行为,并且浏览器供应商愿意实施更改。这不是这里的情况。
    【解决方案2】:

    &lt;head&gt; 之前的文本节点可能是一个遗漏。您不会在根元素之前获得文本节点,因为大多数 XML/HTML 解析器无法处理根节点之外的元素,因此它们会默默地忽略它们。如果您在此处添加注释或处理指令,也会发生同样的情况。

    【讨论】:

    • 我没有具体的例子,但我想有些环境足够“聪明”,可以过滤掉“不相关”的文本,即不重要的空白。如果一个文本元素只包含微不足道的空白,则实现将其删除可能是合法的。作为一名开发人员,当这种情况发生时,我通常会心存感激。
    • “”和“”之间的“CR”在哪种情况下比“”和“”之间的重要性更大或更小?跨度>
    • 我必须同意亚伦的观点。虽然 和 之间的 CR 对我来说毫无用处,但与其他一些 CR 一样重要。如果可能的话,我希望我的环境足够智能以完全遵守标准。事实上,我记得对 IE 和 FF 的文本节点差异感到非常恼火。也就是说,我已经在w3.org/Bugs/Public/show_bug.cgi?id=10136 的该页面上发表了评论以进行澄清。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    相关资源
    最近更新 更多