如何使用jQuery去除HTML标签?

Sad*_*utu 68 jquery

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

 <p> example ive got a string</P>
Run Code Online (Sandbox Code Playgroud)

如何编写一个删除的函数<p><p>并返回"example ive have a string"?

Jon*_*Jon 126

使用.text()功能:

var text = $("<p> example ive got a string</P>").text();
Run Code Online (Sandbox Code Playgroud)

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

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

  • 将HTML直接放入$()是危险的,因为这可以用其他方式解释它(即作为CSS选择器).使用`$("<div />").html("<p>示例我有一个字符串</ P>").text()`代替. (25认同)
  • 处理动态内容时,如果内容是纯文本而不是 html,则会导致错误。所以我使用 `$('&lt;span&gt;'+content+'&lt;/span&gt;').text();` (2认同)

Sim*_*ias 74

最安全的方式是依靠浏览器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>') );
Run Code Online (Sandbox Code Playgroud)

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

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

最简单的方法在纯JavaScript,如果你与浏览器合作<= Internet Explorer 8的是:

string.replace(/(<([^>]+)>)/ig,"");
Run Code Online (Sandbox Code Playgroud)

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

  • 试图用正则表达式剥离HTML是一个[坏主意](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags). (4认同)
  • 提供的功能stripHTML不会剥离HTML,而是对特殊字符进行html编码。 (2认同)