Javascript 如何从字符串中去掉某些html标记?

Javascript 如何从字符串中去掉某些html标记?,javascript,jquery,html,parsing,text,Javascript,Jquery,Html,Parsing,Text,我有一个,用户可以在其中键入内容,并且可以键入html。一旦他们输入完毕,将变回包含他们刚刚输入内容的。但是,我想去掉某些标记,例如,,等等。。。在我把它放回之前,信不信由你,你可以(安全地)用浏览器内置的HTML解析器完成这项工作。只需使用document.createElement创建一个新的div,使用innerHTML将textarea的内容放入div中,就可以使用一个完整的DOM。不,将不评估此div中包含的脚本 下面是一个简单的示例,它从元素中删除了允许的\u标记列表中未出现的所有标

我有一个
,用户可以在其中键入内容,并且可以键入html。一旦他们输入完毕,
将变回包含他们刚刚输入内容的
。但是,我想去掉某些标记,例如
,等等。。。在我把它放回

之前,信不信由你,你可以(安全地)用浏览器内置的HTML解析器完成这项工作。只需使用
document.createElement
创建一个新的div,使用
innerHTML
将textarea的内容放入div中,就可以使用一个完整的DOM。不,将不评估此div中包含的脚本

下面是一个简单的示例,它从元素中删除了
允许的\u标记列表中未出现的所有标记

var ALLOWED_TAGS = ["STRONG", "EM", "BLOCKQUOTE", "Q", "DEL", "INS", "A"];

function sanitize(el) {
    "Remove all tags from element `el' that aren't in the ALLOWED_TAGS list."
    var tags = Array.prototype.slice.apply(el.getElementsByTagName("*"), [0]);
    for (var i = 0; i < tags.length; i++) {
        if (ALLOWED_TAGS.indexOf(tags[i].nodeName) == -1) {
            usurp(tags[i]);
        }
    }
}

function usurp(p) {
    "Replace parent `p' with its children.";
    var last = p;
    for (var i = p.childNodes.length - 1; i >= 0; i--) {
        var e = p.removeChild(p.childNodes[i]);
        p.parentNode.insertBefore(e, last);
        last = e;
    }
    p.parentNode.removeChild(p);
}​

如果只想删除特定的标记,可以使用regex。还是要删除所有标记?我只想删除特定的标记及其内容。这会有帮助:这很好。不过我发现了一个问题。如果我有类似于
的内容,那么脚本将执行。出于某种原因,如果您有这样的嵌套标记,第二个非法标记将永远不会被删除。我可以使用类似于
的东西,输入将出现,即使第一个标记甚至不是真正的标记。user1359900,你完全正确。我必须将节点列表转换成一个数组,这样它就不会被usurp函数弄乱。它现在应该能按预期工作了。
function sanitizeString(string) {
    var div = document.createElement("div");
    div.innerHTML = string;
    sanitize(div);
    return div.innerHTML;
}