Как вставить HTML в виде текста

#javascript #html

#javascript #HTML

Вопрос:

Я хочу, чтобы HTML, например, <p> , отображал show именно так, в виде обычного текста, а не интерпретировался браузером как фактический тег.

Я знаю, что в jQuery есть .html и .text, но как это делается в raw JS?

Существуют такие функции, как encodeURIComponent, которые кодируют <p> в

, но если я просто помещаю это в HTML, оно интерпретирует это буквально как

.

Итак, есть также такие вещи, как amp;> и amp;< , они работают, но я не могу найти никаких функций JavaScript, которые избегали бы этого.

Есть ли правильный способ отобразить HTML в виде текста с помощью необработанного JavaScript?

Комментарии:

1. Я лично использую устаревший, но рабочий тег XMP вот так: document.getElementById('someDiv').innerHTML='<xm' 'p><h1>Here is some <i>HTML</i></h1></xmp>'

Ответ №1:

Нет необходимости экранировать символы. Просто используйте createTextNode :

 var text = document.createTextNode('<p>Stuff</p>');
document.body.appendChild(text);
  

Смотрите рабочий пример здесь:http://jsfiddle.net/tZ3Xj /.

Именно так это делает jQuery (строка 43 jQuery 1.5.2):

 return this.empty().append( (this[0] amp;amp; this[0].ownerDocument || document).createTextNode( text ) );
  

Комментарии:

1. Знаете ли вы, почему Prototype будет делать это так, как они есть, если этот (более привлекательный) метод работает?

2. @thirtydot, использует ли Prototype экранирование при вставке текста в DOM или это просто служебная функция? Я могу представить, как избежать его использования в другом месте.

3. Может быть, createTextNode сам выполняет экранирование? В любом случае, это та функция, которая мне нужна. Спасибо.

4. .innerText создаст и добавит текстовый узел для вас.

Ответ №2:

Функция, используемая Prototype, выглядит как хорошее начало:

http://www.prototypejs.org/api/string/escapeHTML

 function escapeHTML() {
    return this.replace(/amp;/g,'amp;amp;').replace(/</g,'amp;<').replace(/>/g,'amp;>');
}
  

Версия, более подходящая для использования вне прототипа:

 function escapeHTML(html) {
    return html.replace(/amp;/g,'amp;amp;').replace(/</g,'amp;<').replace(/>/g,'amp;>');
}
  

Ответ №3:

Вы можете использовать aslo innerText из большинства элементов DOM:

 document.getElementById('some').innerText = "There can be <b> even HTML tags </b>";
  

Теги не будут отформатированы. Вы также можете использовать n для новой строки и других кодов ( t , u2623 …). Если вы хотите, чтобы aslo использовал символы фиксированного размера, вы можете использовать тег easy <pre> .

Ответ №4:

Это задание для метода createTextNode

 var target div = document.getElementById('div1');
targetDiv.appendChild(document.createTextNode('<p>HelloWorld</p>'));
  

Ответ №5:

я предлагаю использовать предварительный тег html

и вы можете преобразовать свой, используя эту ссылку

например, если вы копируете

 <p>Hi </p>
  

это даст вам преобразованный код в виде…

 amp;<pamp;>Hi amp;</pamp;>
  

Просто скопируйте и вставьте приведенный выше код в pre, и он будет работать нормально…