it-swarm-ru.tech

Как убрать теги HTML из строки в JavaScript?

Возможный дубликат:
вырезать HTML из текстового JavaScript

Как я могу удалить HTML из строки в JavaScript?

163
f.ardelian

Использование парсера браузера, вероятно, лучшая ставка в современных браузерах. Следующее будет работать со следующими предостережениями:

  • Ваш HTML действителен в элементе <div>. HTML-код, содержащийся в тегах <body>, <html> или <head>, недопустим в коде <div> и, следовательно, может анализироваться неправильно.
  • textContent (стандартное свойство DOM) и innerText (нестандартные) свойства не идентичны . Например, textContent будет включать текст внутри элемента <script>, а innerText - нет (в большинстве браузеров). Это влияет только на IE <= 8, который является единственным основным браузером, который не поддерживает textContent.
  • HTML не содержит <script> элементов.
  • HTML не null
  • HTML-код поступает из надежного источника. Использование этого с произвольным HTML позволяет выполнять произвольный ненадежный JavaScript. Этот пример взят из комментария Майка Самуэля по дублирующему вопросу: <img onerror='alert(\"could run arbitrary JS here\")' src=bogus>

Код:

var html = "<p>Some HTML</p>";
var div = document.createElement("div");
div.innerHTML = html;
var text = div.textContent || div.innerText || "";
213
Tim Down
cleanText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");

Дистиллировано из этот сайт (web.archive) .

239
ReactiveRaven
var html = "<p>Hello, <b>World</b>";
var div = document.createElement("div");
div.innerHTML = html;
alert(div.innerText); // Hello, World

Это лучший способ сделать это, вы позволяете браузеру делать то, что он умеет лучше всего - анализировать HTML.


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

alert($("<p>Hello, <b>World</b></p>").text());

Проверьте метод текст .

43
Felix

Я знаю, что на этот вопрос есть принятый ответ, но я чувствую, что он работает не во всех случаях.

Для полноты и поскольку я потратил слишком много времени на это, вот что мы сделали: в итоге мы использовали функцию из php.js (которая является довольно приятной библиотекой для тех, кто более знаком с PHP, но иногда создаю немного JavaScript):

http://phpjs.org/functions/strip_tags:535

Казалось, что это единственный фрагмент кода JavaScript, который успешно обрабатывает все виды ввода, которые я вставил в свое приложение. То есть, не нарушая этого - см. Мои комментарии о теге <script /> выше.

25
Till