DOM:添加到DOM时使用cloneNode(true)缺少元素创建的元素

时间:2010-05-24 15:49:56

标签: javascript dom clone

我正在创建一个树控件,我正在尝试使用父元素作为其子元素的模板。为此,我使用element.cloneNode(true)方法深度克隆父元素。然而当我将克隆元素插入DOM时,它缺少某些内部元素,尽管outerHTML值与其父元素相同。令人惊讶的是我观察到IE,Firefox和Chrome中的相同行为让我相信它是设计出来的。

这是我试图克隆的节点的HTML。

<SPAN class=node><A class=nodeLink href="/SparklerRestService2.aspx?q={0}" name=http://dbpedia.org/data/Taylor_Swift.rdf>
<IMG class=nodeIcon alt="Taylor Swift" src="images/node.png"><SPAN class=nodeText>Taylor Swift</SPAN></A><SPAN class=nodeDescription>Taylor Swift is a swell gall who is realy great.</SPAN></SPAN>

一旦我使用cloneNode(true)克隆了节点,我检查了outerHTML属性并发现它确实与原始属性相同。

<SPAN class=node><A class=nodeLink href="/SparklerRestService2.aspx?q={0}" name=http://dbpedia.org/data/Taylor_Swift.rdf><IMG class=nodeIcon alt="Taylor Swift" src="images/node.png"><SPAN class=nodeText>Taylor Swift</SPAN></A><SPAN class=nodeDescription>Taylor Swift is a swell gall who is realy great.</SPAN></SPAN>

然而,当我将它插入DOM并使用FireBug检查结果时,我发现该元素已被转换:

<span class="node" style="top: 0px; left: 0px;"<a class=nodeLink href="/SparklerRestService2.aspx?q={0}" name=http://dbpedia.org/data/Taylor_Swift.rdf>Taylor Swift</a><span class="nodeDescription">Taylor Swift is a swell gall who is realy great.</span></span>

请注意,节点的孙子(图像标签和围绕“泰勒斯威夫特”的跨度标签)都缺失了,虽然奇怪的是,曾孙子“泰勒斯威夫特”文本节点已经进入树中。

任何人都可以对这种行为有所了解吗? 为什么节点在插入DOM后会消失,为什么我在所有三个主要浏览器引擎中看到相同的结果?

1 个答案:

答案 0 :(得分:0)

我尝试过它并且运行正常。我注意到你说文字改为说“很棒”,甚至连原版都没有。对不起,但我不买。