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});
}
Run Code Online (Sandbox Code Playgroud)
它说getAttribute不是childNodes [j]的函数.怎么了?我没有看到这一点.
请记住,childNodes包括文本节点(和注释节点,如果有的话,以及处理指令,如果有的话,等等).nodeType在尝试使用只有Element的方法之前一定要检查.
更新:在2018年,你可以使用children,只包括Element儿童.它受到所有现代浏览器和IE8-IE11的支持.(旧的IE中有一些怪癖,请参阅polyfill的链接以平滑它们.)
nodeType在调用特定于元素的方法之前,检查属性是否为1(表示节点是元素)getAttribute().此外,忘记getAttribute()并且setAttribute():你几乎从不需要它们,它们在IE中被破坏了,它们没有做你想象的那样.请改用等效的DOM属性.在这种情况下:
var child = objects[i].childNodes[j];
if (child.nodeType == 1 && child.name == 'movie') {
/* DO SOMETHING */
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15720 次 |
| 最近记录: |