Ответ 1

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

  • Ваш 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 || "";

Ответ 3

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());

Ознакомьтесь с методом text.

Ответ 4

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

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

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

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