Foros del Web » Programando para Internet » Javascript »

Problema con getElementByTagName

Estas en el tema de Problema con getElementByTagName en el foro de Javascript en Foros del Web. Hola amigos, Tengo un problema con getelementsbytagname. Tengo el siguiente HTML y javascript Código HTML: <div id= "wrapper" > <p> fsdfsdfsdf </p> <p> fsdfsdfsdf </p> ...
  #1 (permalink)  
Antiguo 21/05/2010, 10:01
 
Fecha de Ingreso: octubre-2005
Mensajes: 240
Antigüedad: 18 años, 7 meses
Puntos: 1
Problema con getElementByTagName

Hola amigos,

Tengo un problema con getelementsbytagname. Tengo el siguiente HTML y javascript

Código HTML:
<div id="wrapper">

	<p>fsdfsdfsdf</p>
	<p>fsdfsdfsdf</p>
	<p>fsdfsdfsdf</p>
	<p>fsdfsdfsdf</p>
	<p>fsdfsdfsdf</p>
	<p>fsdfsdfsdf</p>
	


</div> 
Código Javascript:
Ver original
  1. asd = document.getElementsByTagName("p");
  2. for(a=0;a<asd.length;a++)
  3. document.getElementById("wrapper").removeChild(asd[a]);

Y pues resulta, que en vez de eliminarme todos los <p>, me borra 3 nada mas. ¿Esto es normal?

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

lee este tema problema javascript appenchild
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 21/05/2010, 10:28
 
Fecha de Ingreso: octubre-2005
Mensajes: 240
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Problema con getElementByTagName

Gracias por responder zerokilled,

Leyendo el link proporcionado, parece que tengo un error de concepto. Es un objeto DOM en vez de un array no?

La verdad es que lo del tema del DOM y eso es un tema pendiente para mi y no lo entiendo mucho. Como debería plantear el bucle para extraer todos los elementos con getElementByTagName entonces?

Gracias y un saludo!
  #4 (permalink)  
Antiguo 21/05/2010, 10:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problema con getElementByTagName

Hola:

Puedes usar un índice para recorrer cualquier array, y tampoco es cosa exclusiva del DOM... pero si modificas el array los índices pueden ser distintos... por ejemplo, para vaciar un array cualquiera basta con borrar el elemento 0 de ese array... ... eso sí, debes hacerlo siempre que exista un elemento con el índice 0... o sea, siempre que en el array haya elementos....

Esa lógica no es exclusiva del DOM.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #5 (permalink)  
Antiguo 21/05/2010, 10:51
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
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.
  #6 (permalink)  
Antiguo 21/05/2010, 11:19
 
Fecha de Ingreso: octubre-2005
Mensajes: 240
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Problema con getElementByTagName

Gracias zerokilled,

Ambas opciones me han funcionado, creo que entiendo mas o menos el concepto que tratas de explicar.

Te refieres a lo siguiente:

[0]
[1]
[2]
[3]

Cuando en el bucle remueve el 0, entonces 1,2,3 pasan a ser 0,1,2 y asi sucesivamente. Con razón me borraba la mitad, pasaba de 6 a 3 y si le volvía a dar me pasaba de 3 a 1 y luego de 1 a 0. Tiene su lógica.

Gracias por todo,

Un saludo!
  #7 (permalink)  
Antiguo 21/05/2010, 12:58
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Problema con getElementByTagName

Otra opción es recorrer el bucle de manera normal, pero en orden inverso, es decir, desde length-1 a 0, decrementando la variable de iteración con el operador --.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:48.