2009-08-28 27 views
23

Modifico document.getElementById('').innerHTML con Java Script en una página. Funciona bien en Firefox, pero no en IE8. Por favor, ver más abajo para más detalles:¿Por qué document.getElementById ('tableId'). InnerHTML no funciona en IE8?

HTML Code: código

<table> 
    <tr id="abc"> 
    <td id="ccc" style="color:red;">ccc</td> 
    </tr> 
</table> 

Java Script:

document.getElementById('abc').innerHTML = '<td id="bbc" style="color:yellow;">abc</td>' 

Cuando ejecuto el código JS en Firefox, que va a cambiar la palabra pantalla de 'ccc 'a' abc ', pero simplemente no funciona en IE8, ¿alguien sabe por qué? ¿Hay alguna forma en que pueda hacer que esto funcione en IE8 también?

+0

Fwiw, este tipo de problema es exactamente por qué utilizo jQuery - o alguna otra biblioteca - para trabajar con el DOM – SooDesuNe

Respuesta

33

Dado que el problema es en IE8, see MSDN:

La propiedad es de lectura/escritura para todos los objetos excepto los siguientes, para lo cual es de sólo lectura: COL, COLGROUP, marcos, HEAD, HTML, estilo, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.

(el énfasis es mío)

Colin's work-around (innerText establecer en el lugar de tdinnerHTML en el tr) es una buena en su caso. Si sus necesidades se vuelven más complejas, tendrá que recurrir al The Table Object Model.

+0

si quiero cambiar todo el elemento td, ¿qué debo hacer? para exp: código HTLM

ccc
códigoJS: document.getElementById ('abc') innerHTML. = ' abc' –

+1

** @ jin yong ** 'var tds = document.getElementById ('abc'). getElementsByTagName ('td'); for (var i = 0; i

+3

Solo una adición. Esto no se limita a IE8: todas las versiones de IE sufren este error interno de HTML. http://tinyurl.com/ltar5f – scunliffe

2

Use este lugar:

document.getElementById('abc').innerText = 'ccc'; 
+0

Si va a utilizar innerText tiene que solucionar el hecho de que Firefox no lo admite (¿todavía?) Http://www.google.com.au/search?hl=en&client=firefox-a&rlz=1R1GGGL_en___AU314&hs=8ts&q = innerText + Firefox & btnG = Buscar y meta = –

+2

@MatthewLock Firefox no lo hace admite el 'innerText' ya que es una propiedad no estándar, Firefox admite el' textContent' estándar en su lugar. – undefined

2

Creo IE comporta de forma extraña cuando se juega con el innerHtml tr elementos. Me gustaría seleccionar la fila con getElementById, y luego seleccione el TD y alterar de que uno innerHtml:

document.getElementById('abc').firstChild.innerHTML = 'abc'; 

(Aunque hay que tener cuidado con esto: a menudo el espacio en blanco entre el TR y el TD se considerará válida nodo)

Hay todo un montón de funciones especiales para trabajar con tablas en el DOM

var tblBody = document.getElementById(tblId).tBodies[0]; 
var newRow = tblBody.insertRow(-1); 
var newCell0 = newRow.insertCell(0); 

Ver todas las funciones aquí: http://www.mredkj.com/tutorials/tablebasics1.html

2

innerHTML es de sólo lectura para como se ha señalado aquí: http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx

La propiedad es de lectura/escritura para todos los objetos excepto los siguientes, para los que es de sólo lectura: COL, COLGROUP, marcos, HEAD, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.

¿Por qué no solo está planteando una idea y cambiando ese valor en particular?

5

Desde innerHTML de TR es de sólo lectura como algunas personas han dicho, es mejor cambiar su margen de beneficio para apuntar el TD:

<table><tr><td id="changeme"> ... </td></tr></table> 

entonces se puede establecer el contenido de la TD como desee a través innerHTML, y cambiar otras propiedades estableciendo su valor en el nodo DOM:

var td = document.getElementById("changeme"); 
td.innerHTML = "New Content"; 
td.cssText = "color: red"; 
td.className = "highlighted"; 

usted consigue la idea ...

Esto le ahorra la sobrecarga de la destrucción y la creación de un extra elemento DOM (TD)

2

En lugar de un <div></div>, también se puede utilizar <span></span>

2

En otra pregunta StackOverflow me encontré con un enlace a un blog escrito por el tipo que implementa la parte del motor Trident. Es un defecto de diseño (debido a la falta de tiempo y problemas de compatibilidad con versiones anteriores) que nunca se solucionó. Puede read his notes (including his personal workaround) here.

Sin embargo, para solucionarlo en mi proyecto, como ya estaba usando jQuery, acabo de utilizar la función .html() de jQuery.

// OLD 
localRows[cIndex].innerHTML = '<div>Test Div</div>'; 

// FIXED 
$(localRows[cIndex]).html('<div>Test Div</div>'); 
0

Gracias a su gran ayuda .html()

que estaba usando

document.getElementById('site'+cValue).innerHTML=tableReadyElem; //work with mozila not ie 

$(document.getElementById('site'+cValue)).html(tableReadyElem);//work for both 
Cuestiones relacionadas