Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/05/2010, 10:51
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 9 meses
Puntos: 1485
Respuesta: Problema con getElementByTagName

si quieres remover todos los elementos de otro elemento, es cuestion de recorrerlo mediante la comprobacion de la existencias de elementos. puedes hacerlo con cualquiera de las siguientes propiedades o funcion: childNodes.length, firstChild, lastChild, o hasChildNodes(). la forma menos complicada,
Código:
// siendo element la referencia al elemento que se desea vaciar;
while(element.firstChild) element.removeChild(element.firstChild);
// el bucle esta controlado por la existencia de un primer elemento hijo;
por otro lado, si solo quieres eliminar unos elementos especificos, por ejemplo todos los elementos SPAN, captura todos los SPAN y en el ciclo siempre apuntas al primer indece de la coleccion, sin la necesidad de un iterador porque de lo contrario te sucede lo que estas experimentando.
Código:
var spans = element.getElementsByTagName("span");
while(spans.length) spans[0].parentNode.removeChild(spans[0]);
// el bucle esta controlado por la longitud de la coleccion;
¿a que se debe el error? getElementsByTagName, al igual que otras propiedades y funciones del DOM, devuelven un objeto tipo HTMLCollection. este objeto es activo, de modo que la longitud de la coleccion va cambiando a la vez que se desplazan o eliminan [y creo que tambien cuando se agregan nuevos elementos] los elementos de la coleccion. debido a esta transformacion, un iterador numerico no apunta a todos los indice de la coleccion, dejando asi una cantidad de elementos sin tocar.

@edit,
ciertamente como dice caricatos, ese error no es exclusivo de las colecciones. tambien sucede con los arrays si los manipulas con push y pop, entre otras funciones.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.