JavaScript getAttribute不起作用

时间:2011-01-04 15:38:03

标签: javascript

var objects = document.getElementsByTagName('object');
for (var i=0, n=objects.length;i<n;i++) {
    objects[i].style.display='none';
    var swfurl;
    var j=0;
    while (objects[i].childNodes[j]) {
    if (objects[i].childNodes[j].getAttribute('name') == 'movie') {
            /* DO SOMETHING */ 
    }
    j++;
}
    var newelem = document.createElement('div');
    newelem.id = '678297901246983476'+i;
    objects[i].parentNode.insertBefore(newelem, objects[i]);
    new Gordon.Movie(swfurl, {id: '678297901246983476'+i, width: 500, height: 400});
}

它说getAttribute不是childNodes [j]的函数。怎么了?我没有看到这一点。

3 个答案:

答案 0 :(得分:8)

请记住,childNodes包括文本节点(和注释节点,如果有的话,以及处理指令,如果有的话,等等)。在尝试使用仅nodeType的方法之前,请务必检查Elements

更新:在2018年,您可以改为使用children,其中只包含Element个孩子。它受到所有现代浏览器和IE8-IE11的支持。 (旧的IE中有一些怪癖,请参阅polyfill的链接以平滑它们。)

答案 1 :(得分:6)

在调用特定于元素的方法(例如nodeType)之前,检查getAttribute()属性是否为1(表示节点是元素)。另外,忘记getAttribute()setAttribute():你几乎从不需要它们,它们在IE中被破坏了,它们没有你想到的那样。请改用等效的DOM属性。在这种情况下:

var child = objects[i].childNodes[j];
if (child.nodeType == 1 && child.name == 'movie') {
    /* DO SOMETHING */ 
}

答案 2 :(得分:-5)

您使用的浏览器是什么?如果是IE,则需要使用readAttribute

- 帕维尔