看起来这是我的问题:Internet Explorer innerHTML Quirk:
但是,innerHTML 在 Internet Explorer 中存在问题。
HTML 标准要求对内容的显示进行转换。
所有种类和数量的相邻空格都被折叠成一个空格。这是一件好事——作为一个例子,它允许我在这个源文件中添加很多换行符,而不必担心显示文本中出现奇怪的换行符。
Internet Explorer 在分配给 innerHTML 属性时应用这些转换。这似乎是个好主意:它在显示期间节省了一点时间,因为如果内存中的表示已经标准化,那么浏览器在需要显示文本时就不必进行标准化。
不过,规范化规则也有例外。值得注意的是,这些元素是 <textarea> 元素、<pre> 元素,以及在 CSS 感知浏览器中具有任何值但对于 white-space 属性正常的元素。
Internet Explorer 不考虑这些特殊情况。第三个使他们的优化成为一个坏主意,因为空白可能会在运行时发生变化,例如通过 DOM。在任何情况下,Internet Explorer 都会将所有对 innerHTML 属性的赋值规范化,从而产生如下所示的效果。
此文本在页面加载时填充文本区域。这也包含换行符和多个空格。格式也保留在这里,除了 UA 可能会换行。
(重点补充)
实际上,如果我将其更改为:
<div id="div">
<pre>
...
</pre>
</div>
和
$("#div pre").text()
或者简单地说:
<style type="text/css">
#div { white-space: pre }
</style>
这一切都神奇地起作用。