如何从JavaScript中删除字符串中的HTML标记?

时间:2011-02-15 09:56:36

标签: javascript html-parsing

  

可能重复:
  Strip HTML from Text JavaScript

如何从JavaScript中删除字符串中的HTML?

4 个答案:

答案 0 :(得分:237)

cleanText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");

this website (web.achive)中提取。

答案 1 :(得分:213)

使用浏览器的解析器可能是当前浏览器中最好的选择。以下内容将起作用,但需要注意以下几点:

  • 您的HTML在<div>元素中有效。 <body><html><head>标记中包含的HTML在<div>内无效,因此无法正确解析。
  • textContent (the DOM standard property) and innerText (non-standard) properties are not identical。例如,textContent将包含<script>元素中的文本,而innerText则不会(在大多数浏览器中)。这仅影响IE&lt; = 8,这是唯一不支持textContent的主要浏览器。
  • HTML不包含<script>个元素。
  • HTML不是null
  • HTML来自受信任的来源。使用任意HTML,可以执行任意不受信任的JavaScript。此示例来自Mike Samuel对重复问题的评论:<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 || "";

答案 2 :(得分:43)

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方法。

答案 3 :(得分:25)

我知道这个问题有一个公认的答案,但我觉得它在所有情况下都不起作用。

为了完整性,因为我花了太多时间在这上面,这就是我们所做的:我们最终使用了来自php.js的函数(对于那些更熟悉PHP而且还做了一个非常好的库偶尔会有一点JavaScript):

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

它似乎是唯一能够成功处理我填充到我的应用程序中的所有不同类型输入的JavaScript代码。也就是说,不破坏它 - 请参阅我对上面<script />标记的评论。