【问题标题】:What whitespaces in HTML are considered whitespace nodesHTML 中的哪些空白被视为空白节点
【发布时间】:2015-01-04 05:00:00
【问题描述】:

在开始的 html 标记之后和在结束的 html 标记空白节点之前的空白不是吗?考虑以下代码:

<!DOCTYPE HTML>
<html>
  <head>
    <title>The document</title>
  </head>
  <body>
    <div>Data</div>
    <ul>
      <li>Warning</li>
      <li></li>
    </ul>
    <div>Top Secret!</div>
  </body>
</html>

现在,当我在 Firebug 中查看呈现的页面时,我看到“head”节点在其两侧都有一个“title”节点和 2 个“whitespace”节点。这是我所期望的。同样,我曾期望在&lt;html&gt;&lt;head&gt; 之间以及&lt;/body&gt;&lt;/html&gt; 之间看到“空白”节点。但事实并非如此。为什么 Firebug 不将它们视为空格?

您也可以在this 在线 DOM 查看器上试用。

【问题讨论】:

  • 这是我的一个疯狂猜测,但在 &lt;html&gt;&lt;head&gt; 之间以及在 &lt;/body&gt;&lt;/html&gt; 之间不允许有内容,因此这些位置的空白不应影响内容.
  • 然而,这与developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/… 的说法相矛盾。
  • 无法重现此问题。您的 Firefox 版本是什么?
  • @user1835565 在 Firefox 33.0.2 上
  • 你说的firebug是指F12自带的插件还是集成工具?如果是插件我就不用了。

标签: javascript html dom


【解决方案1】:

我知道这是一个老问题,但它值得一个正确的答案,因为浏览器处理&lt;html&gt;&lt;head&gt; 之间的两种情况(1)和&lt;/body&gt;&lt;/html&gt; 之间的两种情况不同.

在第一种情况下,浏览器会简单地丢弃空格字符。 HTML解析器的树构造阶段的"before head" insertion mode要求空格被丢弃。虽然这很不寻常,但很可能是为了向后兼容。在 CSS 之前的日子里,浏览器很可能需要丢弃这些字符来阻止奇怪的空格出现在显示文档的开头。

在第二种情况下,空格字符不会被丢弃,它们会被添加到 DOM 文档中。但它们不是作为文本节点添加到 正文元素之后,而只是在正文元素的末尾。因此在&lt;/body&gt;&lt;/html&gt; 标签之间的DOM 查看器中没有要显示的文本节点。

【讨论】:

    【解决方案2】:

    在 Mozilla 中,原始文档的文本内容中的所有空格都在 DOM 中表示。 这不包括标签中的空格。

    所以这意味着: a)会有一些文本节点只包含空格 b) 一些文本节点的开头或结尾会有空格。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 2015-12-14
      • 2013-05-01
      • 2016-06-09
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多