我需要使用javascript删除所有html标签,除了我明确允许的那些标签。我的表单只允许以下标记及其各自的结束标记:
<b> <strong> <i> <em> <u> <br> <pre>
<blockquote> <ol> <ul> <li>
<a href="http://www.somesite.com">link</a>
应删除所有其他标记。我一直在搜索,但我只找到了删除所有标签或删除单个标签的实例。这可以简单地完成吗?我不能使用PHP,必须是javascript。任何解决方案?
谢谢!
答案 0 :(得分:1)
所以啜饮各种形式的安全 女巫,这就是为什么你在第一时间做这件事
您可以将内容放入div并调用
$('#container :not(b, strong, em, u, br, pre, blockquote, ol, ul, li, a)').remove();
var res = $("#container").html();
答案 1 :(得分:1)
jQuery.fn.removeTags = function()
{
this.each(function()
{
if(jQuery(this).children().length == 0)
{
jQuery(this).replaceWith(jQuery(this).text());
}
else
{
jQuery(this).children().unwrap();
}
});
return this;
};
jQuery("#container").find(":not(b, strong, i, em, u, br, pre, blockquote, ul, ol, li, a)").removeTags();
确保容器不高于body
标记。或者,当它取出head
,html
,script
等标记时,您可能会遇到问题。
此外,如果你想要:不是一个列表,你可以:
var mylist = ["b" ,"strong", ... etc. etc.];
jQuery(":not(" + mylist.join(", ") + ")").removeTags();
甚至把它放在removeTags函数中。 (可能性无穷无尽......)
编辑:正如一些人在评论中指出的那样:可以关闭Javascript。另一件事是我认为你想要保留所有内部信息。如果没有,那么只需一个remove()就足够了,就像megakorre所说的那样。
答案 2 :(得分:0)
正如评论中所指出的,这不能安全地完成。绕过javascript过滤器很容易。这必须在服务器端实现。