Предотвратить jQuery от экранирования HTML-объектов - PullRequest
13 голосов
/ 15 октября 2011

У меня есть простой редактор HTML.Допустим, что пользователь вводит следующее:

<p>Ok, this just &amp; sucks :) &ndash;</p>

и он сохраняется в некоторой переменной:

var content = "<p>Ok, this just &amp; sucks :) &ndash;</p>";

Теперь где-то я использую jQuery для добавления этого текста в некоторый элемент:

$(this).html(content); // where content is the string above

Проблема в том, что он экранирован:

<p>Ok, this just &amp;amp; sucks :) &amp;ndash;</p>

Как мне получить точную строку с &;и & ndash;а также иметь <, а не <;потому что мне нужны HTML-теги? </p>

Редактировать: добавлено больше деталей

Ответы [ 2 ]

9 голосов
/ 15 октября 2011

Проблема не в том, что jQuery экранирует сущности. Я думаю, что если вы используете console.log для записи строки content, вы увидите, что ваш редактор возвращает вам экранированные сущности.

Смысл .html() против .text() в том, что .html() относится к HTML, который будет рассматриваться как HTML.

1 голос
/ 09 мая 2015

Думаю, ты хочешь иметь текст <p>Ok, this just &amp;amp; sucks :) &amp;ndash;</p> должен быть точно показан без их преобразования, так что &amp; и ndash; не будут преобразованы в & и -, затем используйте:

$(this).text(content);

Одна проблема с этим заключается в том, что content будет добавлено в качестве текста на сайте элемент this. не создаст элемент p и добавит его к this.

Но если вы хотите использовать эффект преобразования, ваш код должен работать.

Еще одна вещь, которую я хочу упомянуть, Я считаю, что язык не единственный, связанный с этим обращением. Браузер играет основную роль в этих случаях. Итак, что бы мы ни делали в скрипте, если браузер получит еще один шанс проверить содержимое, он преобразует их в & и -.

...