Foros del Web » Programando para Internet » Javascript »

TBODY e InnerHTML no funcionan en IE, ¿alguna alternativa?

Estas en el tema de TBODY e InnerHTML no funcionan en IE, ¿alguna alternativa? en el foro de Javascript en Foros del Web. Hola amigos, espero expresarme con claridad. Como pone en el título, al usar la propiedad innerHTML de un TBody, Internet Explorer produce un fallo en ...
  #1 (permalink)  
Antiguo 24/09/2008, 10:19
 
Fecha de Ingreso: enero-2005
Ubicación: Málaga
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 1
Pregunta TBODY e InnerHTML no funcionan en IE, ¿alguna alternativa?

Hola amigos, espero expresarme con claridad.
Como pone en el título, al usar la propiedad innerHTML de un TBody, Internet Explorer produce un fallo en tiempo de ejecución. Despues de buscar por la web soluciones y corroborar el problema, he intentado crear un método usando DOM bastante simple, para que me borre el TBODY:
Código:
	function vacia_tbody(name){
		var divcont = document.getElementById(name);
		var i,cont=0;;
		for (i=0;i<divcont.rows.length;i++){
			divcont.deleteRow(divcont.rows[i]);
			cont++;
		}
		if (cont!=0){
			alert(cont + 'filas borradas');
		}
	}
El alert era para intentar descubrir por qué no funcionaba, y es que parece que va borrando la tabla en distintas llamadas, es decir, si la tabla tiene cuatro filas, primero borra dos, aparece el alert, luego otra, aparece otro alert, y luego otra.
Para mí no tiene mucho sentido, pues deberían borrarse todas las filas de una estacada sin salir del bucle.

Por si acaso pego el código con el que la tabla es generada:
Código:
	function CreateCatMenu(tbodyID,opt){
		var tr, td, divtxt, img, divg;
    	var tbody = document.getElementById(tbodyID);
    	var frag = document.createDocumentFragment();
		for(var i=0;i<categorias.length;i++){
			tr = document.createElement("tr");
				td = document.createElement("td");
					divtxt = document.createElement('div');
					divtxt.id = "captxt"+i;
					var j=0;
					divtxt.cont=i;
					divtxt.onclick = function(){
					       clickoption(this.cont,opt);
					}
					divtxt.onmouseover = function() {
						var arg0=new String();
						arg0="captxt"+this.cont;
						MM_changeProp(arg0,'','style.backgroundColor','#CCFF99','DIV');							
                                                var j=0;
						for(j=0;j<this.cont;j++){
							arg0="captxt"+j;
							MM_changeProp(arg0,'','style.backgroundColor','#99FF99','DIV');
						}
						for(j=this.cont+1;j<categorias.length;j++){
							arg0="captxt"+j;
							MM_changeProp(arg0,'','style.backgroundColor','#99FF99','DIV');	
						}
					}
					var TextNode = document.createTextNode(categorias[i]);
					divtxt.appendChild(TextNode);
					td.appendChild(divtxt);
					td.appendChild(divtxt);
				tr.appendChild(td);
				td = document.createElement("td");
					img = document.createElement('img');
					img.id = "capimg"+i;	
					img.src = 'imagenes/mini_eye.gif';
					td.appendChild(img);
				tr.appendChild(td);
			frag.appendChild(tr);
		}
    	if (!tbody.appendChild(frag)) {
    		alert("This browser doesn't support dynamic tables.");
    	}
	}
Bueno... si alguien tiene el bien de darme alguna solución u opinión, estaría muy agardecido.
  #2 (permalink)  
Antiguo 24/09/2008, 10:43
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 3 meses
Puntos: 772
Respuesta: TBODY e InnerHTML no funcionan en IE, ¿alguna alternativa?

Hola LOLoMATS

Prueba borrando las líneas en orden inverso. Algo así:

Código:
for (i=divcont.rows.length-1; i>=0; i--){
Saludos,
  #3 (permalink)  
Antiguo 24/09/2008, 11:52
 
Fecha de Ingreso: enero-2005
Ubicación: Málaga
Mensajes: 17
Antigüedad: 19 años, 3 meses
Puntos: 1
De acuerdo Respuesta: TBODY e InnerHTML no funcionan en IE, ¿alguna alternativa?

Gracias por la rápida y excelente respuesta.
Ignoraba por completo que hubiera que eliminar las filas en orden inverso, de hecho, revisando la especificación del método en la página de W3C no he visto nada, así que deber haber algo más allá.
Lo importante es que funciona para FF e IE, Gracias de nuevo.
  #4 (permalink)  
Antiguo 03/02/2009, 15:54
 
Fecha de Ingreso: febrero-2009
Mensajes: 1
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: TBODY e InnerHTML no funcionan en IE, ¿alguna alternativa?

Revisa la logica del for donde eliminas filas del tbody, recuerda que:
- cada vez que eliminas una fila el tamaño de la coleccion rows disminuye en 1.
- si borras la fila [i], te saltearas una fila del borrado.

Cambie un poco tu rutina para hacer una prueba y me funciono .. mira como te va

function limpiaTabla(tableName){

var divcont = document.getElementById(tableName).getElementsByTa gName("TBODY")[0];
var i,cont=0;
var tamano = divcont.rows.length
for (i=0;i<tamano;i++){
divcont.deleteRow(divcont.rows[0]);
cont++;
}
if (cont!=0){
alert(cont + 'filas borradas');
}
}
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 23:29.