HTML:使用innerHTML绘制表格

时间:2012-12-08 07:31:40

标签: javascript html

document.getElementById("outputDiv").innerHTML = "";
document.getElementById("outputDiv").innerHTML += "<table border=1 width=100%><tr>";
for(j=1;j<=10;j++)
{
    document.getElementById("outputDiv").innerHTML += "<td align=center>"+String.fromCharCode(j+64)+"</td>";
}
document.getElementById("outputDiv").innerHTML += "</tr></table>";

我想用Javascript绘制一个表。 所以我写了上面的代码。 我认为它绘制了一行有10列,但它不起作用。 任何人都知道这个问题???

2 个答案:

答案 0 :(得分:23)

我也在几年前遇到过这个问题。

问题在于,当您使用innerHTML属性添加HTML时,在每次更新后,底层引擎将为您关闭未关闭的标记(并修复其他错误的HTML)。因此,在第二行之后,<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;

Fiddle


方法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);

Fiddle


方法2增强 (更好的方式)

使用CSS代替HTML属性。后者通常按最新规格折旧。

开始学习CSS的一个很好的资源是Mozilla Developer Network

Fiddle


方法3 (很长一段路,但从长远来看是最好的)

使用jQuery

$('<table>').append('<tr>').appendTo('#outputDiv');
for(j=1; j<=10; j++)
    $('<td>').text(String.fromCharCode(j+64)).appendTo('tr');

Fiddle

答案 1 :(得分:2)

我认为主要问题是你的属性没有被引用。

但重复更新循环中dom元素的内容几乎总是一个坏主意 - 每次更新dom内容时,浏览器都会执行一些内部工作以确保页面布局是最新的。

我会在本地构建html字符串,然后在完成后进行最后一次更新。 (当然要确保引用你的属性)

document.getElementById("outputDiv").innerHTML = "";

var newTable = "<table border='1' width='100%'><tr>";
for(j = 1; j <= 10; j++) { //opening braces should always be on the same line in JS
    newTable += "<td align='center'>" + String.fromCharCode(j+64) + "</td>";
}
newTable += "</tr></table>";

document.getElementById("outputDiv").innerHTML = newTable;