Странное поведение - jQuery .html() приводит к потере разрывов строк в элементах ‹pre› в IE8

У меня есть некоторые элементы pre, отформатированные с разрывами строк следующим образом:

<pre id="code1">Some
formatted
code</pre>

<pre id="code2">Some more
formatted
code</pre>

Если я применю следующее к первому элементу pre:

$('#code1').html($('#code1').html());

В IE8 это приводит к потере разрывов строк, и это выглядит так:

Some formatted code

Some more
formatted
code

В Chrome приведенный выше jQuery не дает ожидаемого эффекта.

Пример: http://jsfiddle.net/6mkAa/

Кто-нибудь знает, что вызывает это странное поведение в IE? Я хотел бы отредактировать содержимое моих элементов pre без потери форматирования в процессе.


person Flash    schedule 23.08.2012    source источник
comment
Две вещи: (I) и (E)... этим все сказано.   -  person Marc B    schedule 23.08.2012


Ответы (2)


Вы можете попробовать .text():

http://jsfiddle.net/6mkAa/6/

$('#code1').text($('#code1').text());
person Esailija    schedule 23.08.2012
comment
Это работает, но теряет любой HTML, который у меня есть внутри элемента pre (окраска кода и т. д.). - person Flash; 23.08.2012
comment
Да, тогда вам нужно выполнить нормализацию пробелов вручную. Я могу сделать это позже, если у меня будет время - person Esailija; 23.08.2012

Эта проблема с IE8 связана с тем, что метод Jquery html() использует свойство innerHTML браузера. Некоторые браузеры могут не возвращать HTML, который точно повторяет исходный HTML-код в исходном документе. Например, Internet Explorer иногда не заключает в кавычки значения атрибутов, если они содержат только буквенно-цифровые символы.

вы можете использовать вот так

$("#code1").innerHTML($("#code1").html())
person Manjunatha S L    schedule 23.08.2012