我用一些非常基本的Javascript编写了一个选项卡系统,它在IE 8中像冠军一样运行,但在FireFox 3中, 。该pertitent HTML如下:element.firstChild正在返回'<TextNode ...'而不是FF中的Object
<div id="tabs">
<ul class="tabs">
<li class="current"><a><span>News</span></a></li>
<li><a><span>Videos</span></a></li>
<li><a><span>Photos</span></a></li>
<li><a><span>Twitter</span></a></li>
</ul>
</div>
然后,在页面加载时,我得到投进这个方法:
function processTabs(TabContainer, PageContainer, Index) {
var tabContainer = document.getElementById(TabContainer);
var tabs = tabContainer.firstChild;
var tab = tabs.firstChild;
var i = 0;
.... more code }
代码在这一点无关紧要的休息,因为它永远不会被调用。 tabContainer已正确设置为使用ID选项卡引用div。现在,在我调用tabContainer.firstChild的Internet Explorer中,变量“tabs”引用我的UL,然后调用var tab = tabs.firstChild;引用我的第一个LI。问题是,当我打电话给tabContainer.firstChild Venkman告诉我它正在返回。所以Firefox正在阅读我的换行符,作为div内的实际儿童!我的UL实际上是childNodes集合中的第二个孩子!
有什么办法解决这个问题吗?
谢谢!
做得很好,像魅力一样工作! – dparsons 2010-02-20 01:33:08
在函数'getFirstChild'中,我会检查'firstChild.nodeType!= 1'而不是'firstChild.nodeType == 3',以便跳过其他节点类型,如注释。 – Cito 2012-12-03 22:15:08
这个答案应该更新为建议的@Cito更改,我刚刚遇到了一个复制了此确切代码的开发人员,并且确实在正搜索的第一个元素节点之前存在HTML注释。并因此失败。 – scunliffe 2017-04-05 19:19:31