Je vois que tu utilise IE
donc dans IE tu ne peux pas avoir de <tr> dans une <table>
lorsque tu écris
<table><tr><td>2</td></tr></table>
IE le transforme en
<table><tbody><tr><td>2</td></tr><tbody></table>
lorsque j'ai donné l'exemple c'était sur le principe et je n'ais pas regardé les particularité de IE
mon code n'était XHTML compliant. il faut en passer par le TBODY soit tu mets ton id sur ton tbody et le code que j'avais donné fonctionne
1 2 3 4 5 6 7 8 9 10
| <table><tbody id="mytableid" /></table>
<script >
mytable = document.getElementById('mytableid');
var row = document.createElement('tr');
var container = document.createElement('td');
var theData = document.createTextNode('mytext');
container.appendChild(theData);
row.appendChild(container);
mytable .appendChild(row);
</script> |
soi tu ajoute le tbody à la volée
1 2 3 4 5 6 7 8 9 10 11 12
| <table id="mytableid" ></table>
<script >
mytable = document.getElementById('mytableid');
var tbody = document.createElement('tbody');
var row = document.createElement('tr');
var container = document.createElement('td');
var theData = document.createTextNode('mytext');
container.appendChild(theData);
row.appendChild(container);
tbody .appendChild(row);
mytable .appendChild(tbody);
</script> |
bref si tu respecte la structure du XHTML tous les navigateur supportant le DOM interpréterons correctement ton code.
lorsque tu utilise innerHtml le navigateur va lire le texte et l'envoyer au parser qui va détecter qu'il s'agit de html il vas alors interpréter chaque tag et tenter de construire la structure demandée. si le code n'est pas conforme au règle du xhtml il va faire des choix et ajouter les parties manquantes par exemple les tag non fermés. mais aussi ajouter les tag manquants ainsi lorsque tu écris
document.getElementById("titi").innerHTML += "<tr><td>ligne 2</td></tr>";
en réalité tu fais
document.getElementById("titi").innerHTML += "<tbody><tr><td>ligne 2</td></tr></tbody>";
Mais tu ne le vois pas.
une fois le code lu et interprété le navigateur va instancier en memoire l'objet DOM corespondant. il va relier les objets entre eux et enfin attacher le tout à l'objet sur le quel on a fait le innerhtml après avoir supprimé tous les objets déjà présent.
lorsque tu utilise les méthode du DOM c'est tois qui créé les objets les détache et les attache à ta guise. sans en passer par l'interprête html du navigateur.
le revers de la médaille c'est qu'il te faut respecter la structure du document. ainsi si tu met un tag entre deux tr
(<tr><td>toto</td></tr><div>coucou</div><tr><td>toto</td></tr>)
ça ne marchera pas et la valeur ne sera pas affiché. en passant par l'interprète tu ne sais pas ce que ça donnera mais ça passera. l'interprète html des navigateur est laxiste. cela lui permet d'afficher quelque chose même si la source n'est pas parfaite.
A+JYT
Partager