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列,但它不起作用。 任何人都知道这个问题???
答案 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;
方法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增强 (更好的方式)
使用CSS代替HTML属性。后者通常按最新规格折旧。
开始学习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');
答案 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;