有没有一种简单的方法能够在JavaScript中获取html字符串并去除html? html
这是一个解决@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
使用jQuery,您能够简单地经过使用来检索它函数
$('#elementID').text()
由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邮件客户端都会将其转换,所以用户能够单击它们。
但愿您以为这个有帮助。
我本身建立了一个工做正则表达式:
str=str.replace(/(<\?[a-z]*(\s[^>]*)?\?(>|$)|<!\[[a-z]*\[|\]\]>|<!DOCTYPE[^>]*?(>|$)|<!--[\s\S]*?(-->|$)|<[a-z?!\/]([a-z0-9_:.])*(\s[^>]*)?(>|$))/gi, '');
做为jQuery方法的扩展,若是您的字符串可能不包含HTML(例如,若是您尝试从表单字段中删除HTML)
jQuery(html).text();
若是没有html,将返回一个空字符串
采用:
jQuery('<p>' + html + '</p>').text();
代替。
更新:正如已经指出了意见,在某些状况下,该解决方案将执行JavaScript的包含在html
若是值html
能够被攻击的影响,使用不一样的解决方案。