2009-10-23 29 views
5

我正在寫一個腳本,需要在頁面上移動一個包裹節點元素。我發現當我這樣做時,我將先前包裹的孩子刪除。我如何打開一個節點的孩子,以便我可以在其他地方移動父節點?如何在JavaScript中撤消「surroundContents」?

我的想法是這樣的:

var parg = document.getElementById("blah"); 

    if (parg.hasChildNodes()) 
    { 
    var children = parg.childNodes; 
    while (children.length > 0) 
    { 
     parg.insertBefore(parg.firstChild); 
     parg.removeChild(parg.firstChild); 
    }; 
    }; 

,我猜該生產線的問題了「的insertBefore」的邏輯。

+0

很好的問題!你真的很清楚地表達這個問題 – toddmo 2016-09-07 17:14:44

回答

7

的insertBefore元素節點上運行,並需要兩個參數, 新節點,新節點將先於節點。

function unwrap(who){ 
var pa= who.parentNode; 
while(who.firstChild){ 
    pa.insertBefore(who.firstChild, who); 
} 
} 

//測試

解包(的document.getElementById( 「嗒嗒」));

enter image description here

+0

這是一個絕妙的解決方案,謝謝。 – Matrym 2009-10-23 18:20:58

0

您需要迭代您的第一級子項並將其父項分配給「包裝器」元素的父項。

事情是這樣的,也許:

if (parg.hasChildNodes()) { 
    var children = parg.childNodes; 

    for (child in children) { 
     child.parentNode = parg.parentNode; 
    } 
}