HTML中的空格被视为空白节点

时间:2014-11-07 11:50:15

标签: javascript html dom

在打开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'空白'节点。这是我的期望。同样,我原本希望在<html><head>之间以及</body></html>之间看到“空白”节点。但事实并非如此。为什么Firebug不将它们视为空格呢?

您也可以在this在线DOM查看器上尝试此操作。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但它应该得到一个正确的答案,如果只是因为浏览器处理<html><head>之间的两种情况(1)和{{1}之间的{2}和</body>不同。

在第一种情况下,浏览器只是丢弃空格字符。 HTML解析器的树构造阶段的"before head" insertion mode要求丢弃空格。虽然这很不寻常,但最有可能是向后兼容。在CSS之前的几天,浏览器可能需要丢弃这些字符以阻止出现在显示文档开头的奇数空格。

在第二种情况下,空格字符不会被丢弃,它们会被添加到DOM文档中。但是它们不会在 body元素后添加为文本节点,而只是在它的末尾。因此,</html></body>标记之间的DOM查看器中不会显示任何文本节点。

答案 1 :(得分:0)

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

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

希望这有帮助。