J'ai également rencontré ce problème il y a des années. Le problème est que lorsque vous utilisez la propriété innerHTML
pour ajouter du HTML, après chaque mise à jour, le moteur sous-jacent fermera la balise non fermée (et corrigera d'autres mauvais HTML) pour vous. Donc, après la deuxième ligne, les étiquettes <table>
et <tr>
sont automatiquement fermées et tout le contenu après cela sera simplement écrit à l'extérieur de la table.
Méthode 1 (La manière facile)
Utilisez une chaîne pour stocker le code HTML pour toute la table et le mettre à jour à la fois.
var HTML = "<table border=1 width=100%><tr>";
for(j=1;j<=10;j++)
{
HTML += "<td align=center>"+String.fromCharCode(j+64)+"</td>";
}
HTML += "</tr></table>";
document.getElementById("outputDiv").innerHTML = HTML;
Fiddle
Méthode 2 (La meilleure façon)
utiliser des fonctions DOM
var table = document.createElement('table');
table.setAttribute('border','1');
table.setAttribute('width','100%')
var row = table.insertRow(0);
for(j=1; j<=10; j++){
var text = document.createTextNode(String.fromCharCode(j+64));
var cell = row.insertCell(j-1);
cell.setAttribute('align','center')
cell.appendChild(text);
}
document.getElementById("outputDiv").appendChild(table);
Fiddle
Méthode 2 améliorée (La meilleure façon encore)
Utilisation CSS au lieu des attributs HTML. Ce dernier est généralement déprécié aux dernières spécifications.
Une excellente ressource pour commencer à apprendre CSS est le Mozilla Developer Network
Fiddle
Méthode 3 (Le long chemin, mais le meilleur à long terme)
Utilisation jQuery.
$('<table>').append('<tr>').appendTo('#outputDiv');
for(j=1; j<=10; j++)
$('<td>').text(String.fromCharCode(j+64)).appendTo('tr');
Fiddle
Merci beaucoup: D – Jimmy
Mon plaisir, @Jimmy –