Как установить текст предварительного тега с помощью jquery

Я использую pre tag для хранения некоторого исходного форматированного текста, который возвращает карету. Когда страница сначала отображается, она выглядит нормально. Позже я хочу обновить только предварительные данные. Я пробовал два способа сделать это с помощью jquery, один с использованием .html(), а с другим - с .text(). Оба sorta работают, но .html выбрасывает возврат каретки и двойные пробелы .text, возвращаемые каретой! Я также пробовал .val(), но это не сработало. Здесь код (конечно, я использую только одну из строк jquery за раз).

<pre id="QComment">Initial Text</pre>

через некоторое время,

$('#QComment').text(databack);   // or
$('#QComment').html(databack);

Ответ 1

Это общая проблема между системами на основе nix и системами windows. Кто-то написал простой плагин для создания новой строки для jQuery newlinecharacter

Итак, что вы можете сделать, это:

$('#QComment').text(databack.replace(/\r\n/g,EOL));

Что, что вы делаете, заменяет все разрывы строк в стиле окна теми, которые подходят для просмотра системой данных.

Ответ 2

Работает как прелесть для меня: скрипка для демонстрации

Возможно, у вас есть проблема с кодировкой? Пример поможет.

(.val() устанавливает атрибут value в теге pre, который, конечно, не имеет эффекта.)

Ответ 3

Я бы посоветовал не беспокоиться об использовании jQuery в этом экземпляре и просто установить объект с помощью простого старого javascript:

document.getElementById('QComment').innerHTML = yourHTML;

Нет причин добавлять служебные данные jQuery к чему-то простому. Если вы хотите использовать это на нескольких элементах, jQuery в порядке:

$('#selector, .selector, [selector]').each(function(element, index){
  element.innerHTML = yourHTML;
});

Ответ 4

Попробуйте использовать стандартные методы DOM, возможно, jQuery делает что-то по своему усмотрению:

$('#QComment')[0].innerHTML = html;