2009-10-23 5 views
5

Je suis en train d'écrire un script qui doit déplacer un élément de noeud d'emballage autour de la page. Je trouve que quand je fais cela, j'enlève les enfants précédemment emballés. Comment est-ce que je désinstalle les enfants d'un noeud, de sorte que je puisse déplacer ce noeud parent ailleurs?Comment annuler "surroundContents" en javascript?

Je pensais quelque chose comme ceci:

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

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

La ligne que je devine est le problème est la logique « insertBefore ».

+0

bonne question! Vous exprimez vraiment le problème clairement – toddmo

Répondre

7

insertBefore fonctionne sur un nœud d'élément et prend deux arguments, le nouveau nœud et le nœud le nouveau nœud précédera.

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

// test

Déballer (document.getElementById ("bla"));

enter image description here

+0

Ceci est une solution fantastique, merci. – Matrym

0

Vous devrez effectuer une itération sur vos enfants de premier niveau et affecter leur parent au parent de l'élément "wrapper".

Quelque chose comme ça, peut-être:

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

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