Foros del Web » Programando para Internet » Javascript »

Problema Javascript y appenChild

Estas en el tema de Problema Javascript y appenChild en el foro de Javascript en Foros del Web. Hola a ver si me podeis echar una mano que me estoy rayando mucho Cita: function iniciotabla(){ for(var m=0; m<child.childNodes.length; m++) { alert(child.childNodes.length) createchilds(child.childNodes[m],descripcion); } ...
  #1 (permalink)  
Antiguo 13/05/2010, 01:21
 
Fecha de Ingreso: septiembre-2009
Mensajes: 84
Antigüedad: 14 años, 8 meses
Puntos: 2
Problema Javascript y appenChild

Hola a ver si me podeis echar una mano que me estoy rayando mucho

Cita:
function iniciotabla(){
for(var m=0; m<child.childNodes.length; m++)
{
alert(child.childNodes.length)
createchilds(child.childNodes[m],descripcion);
}
}
El tema es que recorre los elementos creados y por cada iteracion llama a una funcion que añade a una tabla ["Descripcion" | el elemento], para ello en cada llamada le paso el elemento, y la descripcion:

la funcion de la tabla es asi:

Cita:
function createchilds(elemento, descripcion){
tlin = document.getElementById(tabla).rows.length;

if(tlin==0)//si es la primera vez que accedo a la tabla
{lin = document.getElementById(tabla).insertRow(tlin);
td = lin.insertCell(lin.cells.length);
td.innerHTML="titulo tabla";
td.colSpan=2;
td.align="center";
td.background="images/cabecera_over.gif";
td.fontStyle="tahoma";
tlin++;
}
lin = document.getElementById(tabla).insertRow(tlin);
td = lin.insertCell(lin.cells.length);
td.innerHTML=descripcion;
td = lin.insertCell(lin.cells.length);
td.appendChild=elemento;
}
el problema que tengo es el siguiente:

yo se que hay 47 elementos creados, y en cada iteracion muestro el numero de elementos con

alert(child.childNodes.length)

el caso es que cuando hago el appendchild el alert del numero de elmentos en la iteracion siguiente es inferior en uno , es decir 46 , 45..

pero lo mas raro es que se salta elementos,es decir empieza con el primer elemento para m=0, cuando hace el append child m es 1 como deberia ser pero el elmento es el 2, es decir el contador de m de el for lo hace bien pero se salta elementos...

no se si me he explicado bien, o si se me ha pasado algo, no soy ningun experto en javascript pero esto me esta volviendo loco

gracias

Última edición por Hanzo_lx; 13/05/2010 a las 03:01
  #2 (permalink)  
Antiguo 13/05/2010, 02:25
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 Javascript y appenChild

no encuentro el enlace entre el primer y segundo codigo. quiero decir, ¿el segundo codigo es la funcion createchilds? si es asi, asumo que elemento y descripcion son los parametros de la funcion. es recomendable que siempre exponga el codigo un tanto mas completo de modo que se entienda la relacion de uno y el otro.

independientemente de ese detalle... basandome en el error que describes, donde cada iteracion representa un elemento erroneo, sucede porque hay ciertos tipos de objetos del DOM que son activos. activo quiere decir que la informacion contenida en el objeto va mutando a la vez que los nodos se van desplazando. o sea, si un elemento contiene 4 hijos, luego lo reubicas con appendChild, el objeto childNodes reporta 3 hijos aunque no se haya trabajado directamente sobre el objeto childNodes. a mi juicio, me parece que lo estas visualizando como un array. cuando usamos un elemento del array, el array no es alterado bajo ninguna circunstancia a no ser que se opere directamente sobre el array. con los objetos DOM es totalmente distinto, lo unico que se asemeja childNodes con los array es que los elementos son indexados.

la solucion a tu problema depende de lo que realmente estas intentando hacer. a mi parecer, quieres transferir todos los nodos de un elemento a unas celdas especifica de la tabla. en este caso, el bucle no puede ser controlado por un iterador secuencial como un numero incrementado de uno en uno. el control de bucle deberia ser la determinacion de si existe un nodo en dicho elemento. por ejemplo,
Código:
while(element.firstChild){ // el bucle continua mientras existe un primer hijo en el elemento;
// aqui invocas tus funciones o codigos;
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 13/05/2010, 03:16
 
Fecha de Ingreso: septiembre-2009
Mensajes: 84
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Problema Javascript y appenChild

hola muchas gracias

he modificado el primer post para poner las cabeceras de las funciones,

Efectivamente mi problema creo que viene al entender el objeto como array mira expongo mas para acabar de explicarme:

en el html hay un div tal que asi:

<div id="inputs"></div>
cuando se carga la pagina al div inputs se le añaden hijos de tipo "input"

tal que cuando yo hago un bucle asi :
Cita:
var elementos=document.getElementById("inputs");
for(var m=0; m<elementos.childNodes.length; m++)
{
alert(m);
alert(elementos.childNodes.length)
alert(elementos.childNodes.id)
}
el resultado es

alert m=0 3 DEV:A:1
alert m=1 3 DEV:A:2
alert m=2 3 DEV:A:3

si en vez de la funcion anterior por cada iteracion en vez del alert pongo una llamada a la funcion pasandole el child de esa iteracion para que esta cree una tabla tal que asi:

TITULO TABLA
descripcion | elemento DEV:A:1
descripcion | elemento DEV:A:2
descripcion | elemento DEV:A:3

el resultado me sale asi:

alert m=0 3 DEV:A:1
alert m=1 2 DEV:A:3
alert m=2 1 DEV:A:5

y la tabla queda asi

TITULO TABLA
descripcion | elemento DEV:A:1
descripcion | elemento DEV:A:3
descripcion | elemento DEV:A:5

si te fijas la iteracion de m es correcta pero el numero total de childs es inferior en 1 en el momento que hace el appenChild y el elemento que crea el appendchild es el siguiente

creo que asi lo he explicado mejor

gracias por tu ayuda
  #4 (permalink)  
Antiguo 13/05/2010, 05:51
 
Fecha de Ingreso: septiembre-2009
Mensajes: 84
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Problema Javascript y appenChild

gracias, he podido solucionarlo. era exactamente lo que tu comentabas, mi vision de los objetos DOM era erronea, con el bulcle while y el firstChild lo he solucionado todo


Gracias, un placer haber hablado contigo
  #5 (permalink)  
Antiguo 13/05/2010, 06:09
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 Javascript y appenChild

¡me alegra que lo hayas conseguido! pero mas importante, que comprendieras el asunto del por qué.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

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 03:47.