Para mover un nodo y todos sus descendientes sólo necesitamos la referencia del mismo. Debemos utilizar el método ya conocido appendChild. Este método agrega el nodo que le indicamos a la nueva ubicación dentro del árbol y lo elimina automáticamente de su posición actual.
Para ver el funcionamiento de mover un nodo desarrollaremos un ejemplo que mueva el primer item de una lista no ordenada y lo disponga en otra lista (para facilitar el algoritmo todos los elementos "li" de la lista "ul" estarán en la misma línea de texto para que no haya nodos de texto)
<!DOCTYPE html>
<html> <head> <title>Problema</title> <script> function moverItem() var ref1=document.getElementById('lista1'); var refhijo=ref1.firstChild; var ref2=document.getElementById('lista2'); ref2.appendChild(refhijo); } </script> </head> <body> <ul id="lista1"> <li>Opcion 1.</li> <li>Opcion 2.</li> <li>Opcion 3.</li> </ul> <input type="button" value="Mover elemento" onClick="moverItem()"> <ul id="lista2"> </ul> </body> </html>
El código en javascript es:
{ function moverItem() var ref1=document.getElementById('lista1'); var refhijo=ref1.firstChild; var ref2=document.getElementById('lista2'); ref2.appendChild(refhijo); }
Obtenemos primero la referencia a la primera lista "ul":
var ref1=document.getElementById('lista1');
Obtenemos luego la referencia al primer "li" contenido en el "ul":
var refhijo=ref1.firstChild;
Ahora obtenemos la referencia a la segunda lista "ul":
var ref2=document.getElementById('lista2');
Por último añadimos la referencia del "li" al segundo "ul":
ref2.appendChild(refhijo);
Es muy importante notar que cuando agregamos el el item a la segunda lista desaparece de la primera.