我正在尝试从长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
工作?谢谢你的帮助!
答案 0 :(得分:0)
在最后一个循环中,做这样的事情。
for (var k = 0; k < whitelist.length; k++) {
if (attrName !== whitelist[k])
{
elements[i].removeAttributeNode(elements[i].getAttributeNode(attrName ));
}
}