Ответ 1
Похоже, это моя проблема: Internet Explorer innerHTML Quirk:
Однако innerHTML имеет проблему в Internet Explorer.
В стандарте HTML требуется преобразование при отображении содержимого. Все виды и количества смежных пробелы сворачиваются в один пространство. Это хорошая вещь - так же, как пример, это позволяет мне добавить много разрывов строк в этот исходный файл не беспокоясь о странных разрывы строк в отображаемом тексте.
Internet Explorer применяет эти преобразования при присвоении innerHTML. Это похоже на хорошая идея: это экономит немного времени во время отображения, потому что, если представление в памяти уже нормализован, тогда браузер не должны нормализоваться, когда это необходимо отобразить текст.
Существуют исключения из нормализации. Следует отметить, что это элемент <textarea> , <pre> , а в CSS-значении браузеров, элементов с любой стоимостью, но normal для свойства белого пространства.
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>
все это магически работает.