Ne peut pas ajouter dynamiquement des lignes à un <TABLE> dans IE?
J'ai une application AJAX qui télécharge un objet JSON et utilise les données pour ajouter des lignes à une balise HTML <table> à l'aide de Javascript DOM fonctions. Il fonctionne parfaitement... sauf dans Internet Explorer. IE n'est pas donner toute sorte d'erreur, et j'ai vérifié du mieux que je peux que le code est exécuté par le navigateur, mais il n'a tout simplement aucun effet. J'ai créé cette rapide et sale page pour illustrer le problème:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><title></title></head><body>
<table id="employeetable">
<tr>
<th>Name</th>
<th>Job</th>
</tr>
</table>
<script type="text/javascript">
function addEmployee(employeeName, employeeJob) {
var tableElement = document.getElementById("employeetable");
if (tableElement) {
var newRow = document.createElement("tr");
var nameCell = document.createElement("td");
var jobCell = document.createElement("td");
nameCell.appendChild(document.createTextNode(employeeName));
jobCell.appendChild(document.createTextNode(employeeJob));
newRow.appendChild(nameCell);
newRow.appendChild(jobCell);
tableElement.appendChild(newRow);
alert("code executed!");
}
}
setTimeout("addEmployee(\"Bob Smith\", \"CEO\");", 1000);
setTimeout("addEmployee(\"John Franks\", \"Vice President\");", 2000);
setTimeout("addEmployee(\"Jane Doe\", \"Director of Marketing\");", 3000);
</script>
</body></html>
Je n'ai pas essayé IE 8, mais à la fois IE 7 et IE 6 ne pas afficher les lignes supplémentaires qui sont soi-disant en cours d'ajout. Je ne peux pas imaginer pourquoi. Quelqu'un sait-il une bonne solution à ce problème ou suis-je peut-être fait quelque chose de mal?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour créer un élément TBODY pour ajouter votre nouveau TR, puis ajouter la TBODY à votre table, comme ceci:
tableElement.getElementsByType('tbody')
devrait revenir ce qui est recherché ici....tableElement.getElementsByTagName('tbody')[0]
<tbody>
dans mon démo, mais encore il ne semble pas fonctionner sur IE, mon questionApparemment, c'est à dire vous devez ajouter à votre ligne de la TBody élément, et non pas l'élément de la Table...
Voir la discussion à Ruby-Forum.
D'élargir la discussion là-bas, le <table> le balisage se fait généralement sans explicites <thead> et <tbody> le balisage, mais la <tbody> ÉLÉMENT est l'endroit où vous avez réellement besoin d'ajouter votre nouvelle ligne, comme <table> ne contient pas de <tr> éléments directement.
Edit: fonctionne maintenant dans IE! insertSiblingNodesAfter utilise le parentNode de la fratrie, qui se trouve être une tbody dans IE
Il est difficile de savoir ce bizarreries sont en magasin lorsque vous essayez de manipuler le DOM de la croix-navigateur. Je vous recommande d'utiliser une bibliothèque existante qui a été entièrement testé sur tous les principaux navigateurs, et les comptes de bizarreries.
Personnellement, j'utilise MochiKit, vous pouvez plonger dans la manipulation DOM ici:
http://mochikit.com/doc/html/MochiKit/DOM.html
Votre fonction finale devrait ressembler à quelque chose comme ceci: