我正在尝试使用javascript遍历成人节点的子节点并根据需要更改属性。代码挂起在elemtree.tagName上,声明该对象没有该属性。我已经阅读了DOM属性,并且tagName被声明为DOM的属性。为什么不被承认?
以下代码:
elemtree = elem.firstChild;
while (elemtree != null) {
if (elemtree.tagName.toLowerCase() == "img") {
elemtree.src = img;
}
else {
elemtree.display = display;
}
elemtree = elemtree.nextSibling;
}
答案 0 :(得分:2)
elemtree.nextSibling
包含文字和评论节点,这些节点具有nodeName
但没有tagName
属性。
解决方案:
elem.firstElementChild
和elemtree.nextElementSibling
代替(可能的浏览器兼容性问题)。nodeName
代替tagName
。在使用之前检查是否存在tagName
:
if (elemtree.tagName && elemtree.tagName.toLowerCase() == "img") {
答案 1 :(得分:0)
我同意Rob W的观点,最好的解决方案是避免没有属性的节点开始,但是你也可以考虑改变:
if (elemtree.tagName.toLowerCase() == "img")
到
if (elemtree.tagName && elemtree.tagName.toLowerCase() == "img")
这样,如果该属性不存在,则不会抛出错误。