2011-11-30 53 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