Как я могу заменить символы новой строки, используя JavaScript в IE8? - PullRequest
1 голос
/ 08 октября 2011

Я искал Stackoverflow часами и часами, и в Internet Explorer 8 не работает ни одно решение.

Мне предоставляется текст в открытом виде, подобный этому:

This is a legal agreement ("Agreement") between you and ...
License
Subject to you continued and ongoing compliance with the terms and conditions set ...
Restrictions
Except as otherwise explicitly provided in this Agreement, ...
Ownership
Except for this license granted to you, as between you and ...
Disclaimer of Warranties
Use at your own risk. ...

И мне нужно заменить символы новой строки (переносы строк, возврат каретки, как вы хотите их называть) двойными переносами строк (<br/><br/>), чтобы текст выглядел более нормальным.

Функция nl2br из jQuery преобразовывает разрывы строк в br (эквивалент nl2br) отлично работает в большинстве браузеров. Однако мой клиент использует IE8.

Пойдите и попробуйте функцию nl2br, используя IE8 (или современный Internet Explorer, установленный в режим IE8); это не работает.

Кто-нибудь знает, почему он не работает в IE8? И как достичь цели?

P.S. Я поместил здесь код http://jsfiddle.net/L2Ufj/2/ и, как ни странно, он работает в IE8 через jsfiddle, но если вы скопируете его в другое место и запустите его по-настоящему, он не будет работать в IE8.

Ответы [ 2 ]

2 голосов
/ 11 октября 2013

Один из способов обойти это в IE8 - преобразовать разрывы строк в «токен», который IE8 распознает до того, как отобразится на странице. Затем, как только он будет обработан, в обработчике успеха, например, вы можете найти этот токен и заменить его на <br> или что хотите:

например.

Предварительный рендеринг (я использовал
в качестве токена, но вы можете использовать что угодно)

textToEdit = textToEdit.replace(/\n/g, '<br>');

Опубликовать рендер (найдите свой токен и замените его на <br> или как хотите)

renderedTextWrapper.innerHTML = renderedTextWrapper.innerHTML.replace(/&lt;br&gt;/g, '<br>');
1 голос
/ 08 октября 2011

При извлечении элемента innerHTML IE преобразует innerHTML в «стандартный формат» (сворачивая несколько пробелов в один, удаляя разрыв строки и т. Д.), Прежде чем дать вам результат.

Таким образом, вы не можете найти какой-либо символ переноса строки во внутреннем HTML, который вы получаете с IE. Какая плохая новость.

Я думаю, что наиболее выполнимый и простой способ - сохранить текст внутри тега <textarea> вместо обычного <div>. IE оставит <textarea> в покое, когда вы получите его значение вместо innerHTML:

originalText=document.getElementById('EULA_content').value

Конечно, когда вы получите новый текст, вы должны добавить его к другому элементу div.

...