如何使用 jQuery 去除 HTML 标记?

我想从一个字符串中移除 HTML 标记:

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

我如何编写一个函数,删除 <p><p>,并返回只是“例子我得到了一个字符串”?

130863 次浏览

使用 .text()函数:

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

更新 : 正如华晨在下面指出的那样,如果输入字符串不包含任何标记,并且您够倒霉的话,那么它可能会被视为 CSS 选择器。所以这个版本更加健壮:

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

最安全的方式是依靠浏览器 TextNode 来正确转义内容:

function encodeHTML(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( encodeHTML('<p>some <span>content</span></p>') );
document.write( encodeHTML('<script><p>some <span>content</span></p>') );

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

如果您使用 JQuery,那么使用 .text()是安全和向后兼容的。

如果你使用浏览器的话,纯 JavaScript 的 Internet Explorer 8是:

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

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

可以使用现有的分割函数

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

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 ""

这个示例只是为了向您展示拆分是如何工作的。

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

试试这个:

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

如果希望保留元素的 innerHTML 并只去掉最外面的标记,可以这样做:

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