我在IE 和FireFox 下测试以下javascript代码 :
[code="java"]
Tab = function(id)
{
var t= this;
t.tabs = {};
t.tabs = document.getElementById(id).childNodes;
for(i = 0 ; i<t.tabs.length;i++)
{
alert(t.tabs[i].id);
}
}
[/code]
出现以下问题:
ie 下 t.tabs[i].id 能够返回结果;
firefox下返回undefined;
请问这是什么原因?怎么解决?
firefox会把把一个标签的结束符“>”到下一个标签的起始符“<”之间的内容(除注释外,包括任何的文字、空格、回车、制表符)也算是一个节点,而且nodeName="#text"。
所以在循环时加上 if(t.tabs[i].nodeName=="#text") continue;就OK了
原因:childNodes在ff等标准浏览器里会返回空文本节点
解决办法:用getElementsByTagName('*')
[code="java"]
Tab = function(id)
{
var t= this;
t.tabs = {};
t.tabs = document.getElementById(id).childNodes;
for(i = 0 ; i<t.tabs.length;i++)
{
if(t.tabs[i].nodeType==1)
alert(t.tabs[i].id);
}
}
[/code]