从html字符串中删除属性 - 使用removeAttributeNode

时间:2015-07-23 05:16:22

标签: javascript html dom attributes

我正在尝试从长html字符串中删除除某些列入白名单的属性。我正在使用DOM来解析它。

我知道还有很多其他问题,但我的问题是关于我在下面的代码中执行removeAttributeNode时遇到的错误。

var div = document.createElement('div');
div.innerHTML = '<p class=\"p\">text here</p> <div id=\"divId\"></div>';
var elements = div.getElementsByTagName('*');
var whitelist = ["src", "width", "height"];
for (var i = 0; i < elements.length; i++) {
     if (elements[i].attributes.length !== 0) {
        var attr = elements[i].attributes;
        for (var j = 0; j < attr.length; j--) {
            var attrName = attr[j].name;
            for (var k = 0; k < whitelist.length; k++) {
                if (attrName !== whitelist[k]) 
                   elements[i].removeAttributeNode(attr);
            }
        }
     }
}

但是,我一直收到以下错误:Failed to execute 'removeAttributeNode ' on Element: the 1st argument provided is either null, or an invalid Attr object.

但是,我检查了控制台语句,元素[i]不为空。例如,元素[0] = <p class="p">。如何让removeAttributeNode工作?谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

在最后一个循环中,做这样的事情。

for (var k = 0; k < whitelist.length; k++) {
                if (attrName !== whitelist[k])
                 { 
                   elements[i].removeAttributeNode(elements[i].getAttributeNode(attrName ));
                 }
 }