为什么预标签后的换行消失了?

时间:2014-05-31 11:38:16

标签: javascript html dom

为什么紧跟在< pre>之后的新行标签没有出现在DOM?

<html>
<body>

<div id="mydiv">
hello
div
world
</div>

<pre id="mypre">
hello
pre
world
</pre>

<script>
alert("div content: "+document.getElementById("mydiv").innerHTML)
alert("pre content: "+document.getElementById("mypre").innerHTML)
</script>

</body>
</html>

显示与div-tag之后的换行符不同,pre-tag之后的换行符似乎不在dom中。此外,整个身体的innerHTML在预标签后也没有显示换行符。

有没有办法在JS中找到原始HTML文档在&lt; pre&gt;之后是否包含换行符?不是吗?

2 个答案:

答案 0 :(得分:7)

因为what the spec says to do

  

注意:在HTML语法中,将删除紧跟pre元素开始标记之后的前导换行符。

因此,如果你想要那个换行符,有点违反直觉,你必须增加一个:Example

<pre id="mypre">

hello
pre
world
</pre>

附注:我强烈建议您始终包含doctype,即使是在您的问题中的简短示例中也是如此。它可以有所作为(虽然在这种情况下我不认为它。)

答案 1 :(得分:3)

来自specification of <pre>

  

注意在HTML语法中,将删除紧跟在 pre 元素开始标记之后的前导换行符。

我认为这样做是为了让你不必写:

<pre>Some text
some more
and more
</pre>

避免在开头有额外的换行符。你可以写:

<pre>
Some text
some more
and more
</pre>

如果您使用<pre>排列列,这非常有用,因为第一种格式不允许您正确排列第一行。

如果您想在预格式化文本的开头添加额外的换行符,请在标记后面加一个空行:

<pre id="mypre">

hello
pre
world
</pre>