30.12.07

Cosas que aprendo sudando sangre: InnerHTML en Explorer

Me he pasado toda la tarde de hoy peleándome con un script AJAX que funcionaba cojonudamente en Firefox y fallaba miserablemente en Internet Explorer.

La cosa es así. Imagina que tienes la siguiente fila de una tabla:
<tr id='filatabla'><td>contenido</td><tr>
y que quieres cambiar ese contenido por
<td>nuevo contenido</td>
Lo normal es usar un InnerHTML de esta forma:
document.getElementById('filatabla').innerHTML='<td>nuevo contenido</td&gt;';
¿no?

Pues esto en Explorer casca. Lanza un muy aclaratorio "Error desconocido en tiempo de ejecución" que no te ayuda en nada a descubrir lo que pasa.

Tras mucho investigar, la razón parece ser que es el hecho de que IE no permite usar InnerHTML con ciertos elementos de una tabla.

Lo cual es cachondísimo, porque para añadir dinámicamente filas a una tabla se emplea una función tal que así
function addFila(fila){
nuevaFila = document.getElementById('tabla').insertRow(-1);
nuevaFila.id='filatabla'+indiceFilaFormulario;
nuevaCelda=nuevaFila.insertCell(0);
nuevaCelda.innerHTML=fila;
indiceFilaFormulario++;
}
Y esto sí que funciona en ambos navegadores, ya que Explorer sí permite usar innerHTML con una celda individual.

Lo dicho, puto explorer. Vaya tarde de domingo que he pasado por culpa de sus chorradas

8 comentarios:

Anónimo dijo...

Gracias por esto, me has salvado la vida

Anónimo dijo...

El asunto es que el innerHTML para los tr es de solo lectura, osea solo se puede obtener su valor, mas no fijarle un nuevo valor

Anónimo dijo...

Entonces se debe utilizar el innerText.
Lo probe de esta forma y funciona

Contremo dijo...

Fíjate. Pues eso sí que no lo sabía. Gracias!

Carlos dijo...

Gracias, no ha solucionado el problema pero me acercaste increiblemente a la respuesta THKS.


PD:te doy las gracias desde el otro lado de mundo (CHILE)

dan san dijo...

Mil gracias, ahora todos juntos PUTO INTERNET EXPLORER.

El trabajo de todo una tarde a la mierda.

Anónimo dijo...

Eres un crack, va como un tiro.

patilanz dijo...

El innerTEXT no funciona en Firefox pero si en explorer A si que tendreis que detectar el navegador y utilizar innerHTML o innerTEXT dependiendo del navegador.
Un saludo ;)