javascript替换允许的html标签

时间:2011-05-20 03:19:37

标签: javascript jquery

我需要使用javascript删除所有html标签,除了我明确允许的那些标签。我的表单只允许以下标记及其各自的结束标记:

<b> <strong> <i> <em> <u> <br> <pre>
<blockquote> <ol> <ul> <li> 
<a href="http://www.somesite.com">link</a>

应删除所有其他标记。我一直在搜索,但我只找到了删除所有标签或删除单个标签的实例。这可以简单地完成吗?我不能使用PHP,必须是javascript。任何解决方案?

谢谢!

3 个答案:

答案 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标记。或者,当它取出headhtmlscript等标记时,您可能会遇到问题。

此外,如果你想要:不是一个列表,你可以:

var mylist = ["b" ,"strong", ... etc. etc.];
jQuery(":not(" + mylist.join(", ") + ")").removeTags();

甚至把它放在removeTags函数中。 (可能性无穷无尽......)

编辑:正如一些人在评论中指出的那样:可以关闭Javascript。另一件事是我认为你想要保留所有内部信息。如果没有,那么只需一个remove()就足够了,就像megakorre所说的那样。

答案 2 :(得分:0)

正如评论中所指出的,这不能安全地完成。绕过javascript过滤器很容易。这必须在服务器端实现。