如何使用jQuery去除HTML标签?

时间:2012-10-30 13:27:28

标签: jquery

我想从字符串中删除HTML标记。例如,假设我们有字符串:

 <p> example ive got a string</P>

如何编写一个删除<p><p>的函数并返回“示例我有一个字符串”?

5 个答案:

答案 0 :(得分:118)

使用.text()功能:

var text = $("<p> example ive got a string</P>").text();

更新:正如Brilliand在下面指出的那样,如果输入字符串不包含任何标记,并且您不够运行,则可能会将其视为CSS选择器。所以这个版本更强大:

var text = $("<div/>").html("<p> example ive got a string</P>").text();

答案 1 :(得分:72)

最安全的方式是依靠浏览器TextNode来正确转义内容。这是一个例子:

function stripHTML(dirtyString) {
  var container = document.createElement('div');
  var text = document.createTextNode(dirtyString);
  container.appendChild(text);
  return container.innerHTML; // innerHTML will be a xss safe string
}

document.write( stripHTML('<p>some <span>content</span></p>') );
document.write( stripHTML('<script><p>some <span>content</span></p>') );

这里需要记住的是,当我们访问html字符串(innerHTMLouterHTML)时,浏览器会转义TextNodes的特殊字符。相比之下,访问文本值(innerTexttextContent)将产生原始字符串,这意味着它们不安全并且可能包含XSS。

如果您使用 jQuery ,则使用.text()是安全且向后兼容的。请参阅此问题的其他答案。

如果使用浏览器&lt; = Internet Explorer 8,纯JavaScript中的最简单的方法是:

string.replace(/(<([^>]+)>)/ig,"");

但是使用正则表达式解析HTML存在一些问题,因此这不会提供非常好的安全性。此外,这只会处理HTML字符,所以它不是完全xss安全的。

答案 2 :(得分:2)

这是获取url图像的示例,从某个项目中转义p标记。

试试这个:

$('#img').attr('src').split('<p>')[1].split('</p>')[0]

答案 3 :(得分:2)

如果要保留元素的innerHTML并仅去除最外面的标记,则可以执行以下操作:

$(".contentToStrip").each(function(){
  $(this).replaceWith($(this).html());
});

答案 4 :(得分:1)

您可以使用现有的分割功能

一个简单而不稳定的例子:

var str = '<p> example ive got a string</P>';
var substr = str.split('<p> ');
// substr[0] contains ""
// substr[1] contains "example ive got a string</P>"
var substr2 = substr [1].split('</p>');
// substr2[0] contains "example ive got a string"
// substr2[1] contains ""

示例只是为了向您展示拆分的工作原理。