<пред> тег теряет разрывы строки при установке innerHTML в IE

В двойных кавычках \1 и \2 интерпретируются как буквальные 1 и 2. Вам нужно добавить дополнительные обратные слеши, чтобы избежать их. Кроме того, замена $(command substitution) в sed, по-видимому, не работает в сочетании с обратными ссылками. Если вы используете GNU sed, вы можете вместо этого сказать что-то вроде:

echo '"1.2e+04"' | sed "s/\"\([0-9]\+\.[0-9]\+\)e+\([0-9]\+\)\"/echo \"\\1*10^\\2\"|bc -l/;e"

, что дает:

12000.0

Если вы хотите отрубить десятичную точку, вы будете знать что делать; -).

11
задан Rob W 29 December 2011 в 14:35
поделиться

4 ответа

Установка innerHTML разжигает синтаксический анализатор HTML, который игнорирует избыточный пробел включая жесткие переводы строки. При изменении метода для включения <пред> тег в строке, это хорошо работает, потому что синтаксический анализатор HTML сохраняет жесткие переводы строки.

Вы видите это в действии путем выполнения Представления Сгенерированный Источник после выполнения демонстрационной страницы:

<PRE id="test" style="WHITE-SPACE: pre"><SPAN style="COLOR: red">a</SPAN> b c d e f </PRE>

Вы видите здесь, что жесткий перевод строки больше не является частью содержания <пред> тег.

17
ответ дан 3 December 2019 в 03:05
поделиться

Обычно Вы заставите более последовательные результаты при помощи методов DOM создавать динамический контент, особенно когда Вы будете заботиться о тонких вещах как нормализация пробела. Однако, если Вы установлены при использовании innerHTML для этого, существует обходное решение IE, которое должно использовать outerHTML атрибут, и включает теги включения.

if(test.outerHTML)
    test.outerHTML = '<pre id="test">'+textContent+'</pre>';
else
    test.innerHTML = textContent;

Это обходное решение и больше обсуждения могут быть найдены здесь: Вставляя новую строку в пред тег (IE, JavaScript)

5
ответ дан 3 December 2019 в 03:05
поделиться

или вы могли бы

if (el.innerText) {
    el.innerText = val;
} else {
    el.innerHTML = val;
}
6
ответ дан 3 December 2019 в 03:05
поделиться

Это также можно переписать "по-питоновски", т.е.:

el.innerText && el.innerText = val || el.innerHTML = val;

0
ответ дан 3 December 2019 в 03:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: