Pregunta

Un poco raro ... ... si se ejecuta en modo de Internet Explorer 8 o en el modo de vista de compatibilidad peculiaridades, la tabla añadida por el código siguiente no se rinde. ¿Puede alguien decirme por qué, porque no es obvio para mí ..?

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
function AddTable()
{
  var table = document.createElement('table');
  var row = document.createElement('tr');
  table.appendChild(row);
  var cell = document.createElement('td');
  cell.innerHTML='abc';
  row.appendChild(cell);
  var divContainer = document.getElementById('divContainer');
  divContainer.appendChild(table);
}
</script>
</head>
<body>
<div id='divContainer'>
</div>
<input type='button' value='add table' onclick='javascript:AddTable()' />
</body>
</html>
¿Fue útil?

Solución

Microsoft tiene una página que puede iluminar lo que está pasando.

http://msdn.microsoft.com /en-us/library/ms532998(VS.85).aspx#TOM_Create

Para las tablas de la construcción dinámica que abogan por el "modelo de objetos de la tabla", que utiliza métodos como insertRow() y insertCell() para hacer el trabajo que está haciendo con el methodscreateElement() DOM y appendChild(). También está bien si utiliza los métodos DOM, pero "Internet Explorer requiere que se crea un elemento tbody y la inserta en la mesa cuando se utiliza el DOM. Puesto que usted está manipulando la estructura del documento directamente, Internet Explorer no crea el tbody, que está implícita automáticamente cuando se utiliza HTML ".

El modelo de objeto de tabla funciona en el par de navegadores que he probado en (Chrome y Firefox en Mac), por lo que puede no ser una mala idea para familiarizarse con él. O si desea seguir con los métodos DOM, agregue el elemento tBody, porque el IE lo requiere.

Si se agrega el siguiente código al final de su método AddTable() verá cómo comparar los dos (principalmente, la segunda tabla tendrá un tBody en ella). Y va a proporcionar en IE8.

 // now the Table Object Model way
  table = document.createElement('table');
  row = table.insertRow(-1) ;
  cell = row.insertCell(-1) ;
  cell.innerHTML='def';
  divContainer.appendChild(table);

Espero que esto ayude.

Otros consejos

Trate de añadir un elemento tbody

En lugar de

  var row = document.createElement('tr');
  table.appendChild(row);

DO

  var tbody = document.createElement('tbody');
  var row = document.createElement('tr');
  tbody.appendChild(row);
  table.appendChild(tbody);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top