我用一些非常基本的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