JavaScript getAttribute 不起作用
2011-01-04
17663
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个回答
请记住,
childNodes
包含文本节点(以及注释节点(如果有)和处理指令(如果有)等)。在尝试使用只有
Element
s
才具有的方法之前,请务必检查
nodeType
。
更新
:2018 年,您可以使用
children
代替,它仅包含
Element
子元素。它受所有现代浏览器以及 IE8-IE11 支持。(旧版 IE 中存在一些怪癖,请参阅链接以获取 polyfill 以解决这些问题。)
T.J. Crowder
2011-01-04
在调用元素特定方法(例如
getAttribute()
)之前,请检查
nodeType
属性是否为 1(表示节点是元素)。另外,请忘记
getAttribute()
和
setAttribute()
:您几乎不需要它们,它们在 IE 中已损坏,并且无法按照您的想法执行操作。请改用等效的 DOM 属性。在本例中:
var child = objects[i].childNodes[j];
if (child.nodeType == 1 && child.name == 'movie') {
/* DO SOMETHING */
}
Tim Down
2011-01-04
您使用的是什么浏览器?如果是 IE,则需要使用
readAttribute
。
volpav
2011-01-04