私も何年も前にこの問題に遭遇しました。
問題は、このinnerHTML
プロパティを使用して HTML を追加する場合、各更新後に、基になるエンジンが閉じられていないタグを閉じる (そして他の不適切な HTML を修正する) ことです。そのため、2 行目以降ではタグ<table>
と<tr>
タグが自動的に閉じられ、それ以降のすべてのコンテンツはテーブルの外に書き込まれます。
方法 1
(簡単な方法)
文字列を使用してテーブル全体の HTML を格納し、一度にすべて更新します。
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;
フィドル
方法 2
(より良い方法)
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);
フィドル
強化された方法 2
(さらに優れた方法)
HTML 属性の代わりにCSSを使用します。後者は一般に、最新の仕様では減価償却されます。
CSS の学習を開始するための優れたリソースは、Mozilla Developer Networkです。
フィドル
方法 3
(長い道のりですが、長期的には最善の方法)
jQueryを使用します。
$('<table>').append('<tr>').appendTo('#outputDiv');
for(j=1; j<=10; j++)
$('<td>').text(String.fromCharCode(j+64)).appendTo('tr');
フィドル