2011-11-30 102 views
0

我可能誤解了這個函數的正確用法,但我相信appendChild在Firefox中工作不正確。我有一個非常大的腳本,自從版本6以來在IE中運行良好。我們現在試圖使此腳本在所有瀏覽器中都能正常工作,所以我開始在FF中進行測試。appendChild沒有正確設置parentElement

下面是腳本的一些相關線路,修改這裏更容易閱讀:

var tempDocFragment = document.createDocumentFragment(); 
var tempNewtbody = document.createElement("tbody"); 
trElem = document.createElement("tr"); 
tdElem = document.createElement("td"); 

trElem.appendChild(tdElem); 
tempDocFragment.appendChild(trElem); 
tempNewtbody.appendChild(tempDocFragment); 
mytable.appendChild(tempNewtbody); 

代碼就像一個循環,增加了1000+介於0和錶行的表內的上方運行。這一切似乎工作正常,錶行出現在表中。但是,錶行有運行這行代碼的onmouseover事件:

alert(this.parentElement); 

這將返回在Firefox「未定義」,但返回的IE瀏覽器的正確parentElement。因此,看起來Firefox正在運行代碼來正確地追加子元素,但不知何故將任何父母與這些子元素相關聯。我很感激任何對我可能做錯的見解。

謝謝。

+0

您正在將TR添加到片段中,然後將片段添加到tbody中 - 應該是相反的方式 – Leon

+0

爲什麼要將trs附加到文檔片段?也許這就是Firefox認爲的父母? –

+0

我無法重現此行爲;請參閱http://jsfiddle.net/wxQBK/。你可以創建一個演示它的jsFiddle,併發布鏈接? – ruakh

回答

1

parentElementis not supported in Firefox < 9工作。它在IE 4中作爲元素的非標準屬性而開始生活,並且最近在DOM4中被標準化。

改爲使用parentNode

+0

謝謝;我確定這件事很簡單。 :) – Nicholas

2

的標準方法是使用parentNode,它會在所有的瀏覽器

+0

Nah。 「DocumentFragment」也適用於所有瀏覽器。 (請參閱https://developer.mozilla.org/en/DOM:document.createDocumentFragment。) – ruakh

+0

@ruakh:問題是Firefox缺少對'parentElement',而不是'DocumentFragment'的支持。 –

+0

@TimDown:哦,哎呀,我很蠢。謝謝。 :-) – ruakh