我几年前也遇到过这个问题。
问题在于当您使用 innerHTML
属性添加 HTML 时,每次更新后底层引擎都会自动关闭未闭合的标记(并修正其他错误的 HTML),所以在第二行之后,<table>
和 <tr>
标记被自动关闭,此后所有内容都将被写在表格外部。
方法一
(简单的方式)
使用字符串来存储整个表格的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;
Fiddle
。
方法二
(更好的方式)
使用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);
小提琴
方法二增强版
(更好的方式)
使用CSS代替HTML属性进行样式设置。通常不建议使用HTML属性进行样式设置。
学习CSS的绝佳资源是Mozilla开发者网络。
Fiddle
方法三
(虽然比较麻烦,但从长远来看是最好的选择 可选方案)
更新:自从我写下这篇答案已经过去了十多年,网络开发场景在此期间发生了很大的变化。因为这篇答案仍然会偶尔获得赞同,所以我写下这篇文章,告知任何看到它的人,到处使用 jQuery 已不再被认为是最佳实践。上面的方法二(即原生 JavaScript)对于小型/临时/学习项目已经足够好了,使用原生 JavaScript、jQuery 或框架应该是在学习其优缺点后做出的有意识的选择。
使用 jQuery。
$('<table>').append('<tr>').appendTo('#outputDiv');
for(j=1; j<=10; j++)
$('<td>').text(String.fromCharCode(j+64)).appendTo('tr');
小提琴