2009-10-23 14 views
5

Estoy escribiendo un script que necesita mover un elemento de nodo de envoltura alrededor de la página. Me parece que cuando hago esto, elimino los niños previamente envueltos. ¿Cómo desactivo a los hijos de un nodo, de modo que pueda mover ese nodo padre en otro lugar?¿Cómo se puede deshacer "surroundContents" en javascript?

que estaba pensando algo como esto:

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 línea que supongo es el problema es la lógica "insertBefore".

+0

¡excelente pregunta! Realmente expresa el problema claramente – toddmo

Respuesta

7

insertBefore opera en un nodo de elemento y toma dos argumentos, el nuevo nodo, y el nodo del nuevo nodo precederá.

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

// test

unwrap (document.getElementById ("bla"));

enter image description here

+0

Esta es una solución fantástica, gracias. – Matrym

0

Tendrá que iterar sobre sus hijos de primer nivel y asignar sus padres al elemento primario del elemento "envoltorio".

Algo como esto, tal vez:

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

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