2011-10-08 85 views
2

假設我有一個帶父節點和一組子節點的部分dom樹。如何在現有的父母和孩子之間插入DIV *?

如何插入它們之間的DIV?

我開始與

parent --+--> child[0] 
     |--> child[1] 
     |--> child[2] 

..和我想

parent ---> newdiv ---+--> child[0] 
         |--> child[1] 
         |--> child[2] 

我怎麼能這樣結束?

我需要replaceChild()的交談。有沒有像replaceParent()

我想我可以克隆所有的子節點,然後將它們作爲子節點插入到新節點中。但是......是否保留了所有的元素ID?


編輯 - 我沒有使用jQuery或任何框架標記這一點,但也許我應該已經明確了。這不是一個jQuery問題。我想在javascript + DHTML中執行此操作。沒有額外的或外部的框架。

+0

我想克隆所有子節點將是您最好的選擇......望着jQuery的源'wrapAll'(我認爲確實差不多就是你」重新尋找),似乎是做了什麼(雖然我沒有徹底分析):http://james.padolsey.com/jquery/#v=1.6.2&fn=jQuery.fn.wrapAll如果你可以使用jQuery,我建議! –

+1

正確,'wrapAll()'做的訣竅:http://jsfiddle.net/2U7rm/1/ –

回答

3

您可以通過將元素附加到新的父元素來移動元素。在普通的JavaScript:

var newDiv = document.createElement("div"); 

while(parent.hasChildNodes()) 
    newDiv.appendChild(parent.firstChild); 

parent.appendChild(newDiv); 

documentation of W3CappendChild

添加節點newChild到此節點的子列表的末尾。如果newChild已經在樹中,它首先被刪除。

+0

只是爲了澄清 - 將一個元素附加到一個新的父級,刪除它與現有父級的關係。是對的嗎? – Cheeso

+0

@Cheeso - 是的,請參閱https://developer.mozilla.org/En/DOM/Node.appendChild上的說明。它在每個瀏覽器都以這種方式工作。 –

+0

太棒了!謝謝。 – Cheeso