2009-10-23 25 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

答えて

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

0

最初のレベルの子を反復し、その親を「ラッパー」要素の親に割り当てる必要があります。おそらく、このような

何か、:

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

    for (child in children) { 
     child.parentNode = parg.parentNode; 
    } 
} 
関連する問題