从文本JavaScript中删除HTML

有没有一种简单的方法能够在JavaScript中获取html字符串并去除html? html


#1楼

这是一个解决@MikeSamuel安全问题的版本: 正则表达式

function strip(html)
{
   try {
       var doc = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
       doc.documentElement.innerHTML = html;
       return doc.documentElement.textContent||doc.documentElement.innerText;
   } catch(e) {
       return "";
   }
}

请注意,若是HTML标记不是有效的XML,则它将返回一个空字符串(aka,标记必须关闭而且属性必须用引号引发来)。 这不是理想的选择,可是确实避免了潜在的安全利用问题。 安全

若是您没有有效的XML标记,则能够尝试使用: 编辑器

var doc = document.implementation.createHTMLDocument("");

可是因为其余缘由,这也不是一个完美的解决方案。 ide


#2楼

使用jQuery,您能够简单地经过使用来检索它函数

$('#elementID').text()

#3楼

为纯文本电子邮件转换HTML,使超连接(a href)保持完整

由hypoxide发布的上述函数能够正常工做,可是我进行了一些工做,基本上能够转换在Web RichText编辑器(例如FCKEditor)中建立的HTML,并清除全部HTML,可是因为我想要HTML和纯文本版本,以帮助为STMP电子邮件建立正确的部分(HTML和纯文本)。 this

通过长时间的搜索,我本身和个人同事们都使用Javascript中的正则表达式引擎提出了如下建议: spa

str='this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>
';
str=str.replace(/<br>/gi, "\n");
str=str.replace(/<p.*>/gi, "\n");
str=str.replace(/<a.*href="(.*?)".*>(.*?)<\/a>/gi, " $2 (Link->$1) ");
str=str.replace(/<(?:.|\s)*?>/g, "");

str变量开始像这样: code

this string has <i>html</i> code i want to <b>remove</b><br>Link Number 1 -><a href="http://www.bbc.co.uk">BBC</a> Link Number 1<br><p>Now back to normal text and stuff</p>

而后在代码运行以后,它看起来像这样:- orm

this string has html code i want to remove
Link Number 1 -> BBC (Link->http://www.bbc.co.uk)  Link Number 1


Now back to normal text and stuff

如您所见,全部HTML都已删除,而且连接已被保留,超连接文本仍然完好无损。 另外,我还用\\n (换行符)替换了<p><br>标记,以便保留了某种可视格式。

要更改连接格式(例如BBC (Link->http://www.bbc.co.uk) ),只需编辑$2 (Link->$1) ,其中$1是href URL / URI,而$2是超连接的文本。 经过直接在纯文本主体中的连接,大多数SMTP邮件客户端都会将其转换,所以用户能够单击它们。

但愿您以为这个有帮助。


#4楼

我本身建立了一个工做正则表达式:

str=str.replace(/(<\?[a-z]*(\s[^>]*)?\?(>|$)|<!\[[a-z]*\[|\]\]>|<!DOCTYPE[^>]*?(>|$)|<!--[\s\S]*?(-->|$)|<[a-z?!\/]([a-z0-9_:.])*(\s[^>]*)?(>|$))/gi, '');

#5楼

做为jQuery方法的扩展,若是您的字符串可能不包含HTML(例如,若是您尝试从表单字段中删除HTML)

jQuery(html).text();

若是没有html,将返回一个空字符串

采用:

jQuery('<p>' + html + '</p>').text();

代替。

更新:正如已经指出了意见,在某些状况下,该解决方案将执行JavaScript的包含在html若是值html能够被攻击的影响,使用不一样的解决方案。

相关文章
相关标签/搜索