繁体   English   中英

HTML:使用innerHTML绘制表格

[英]HTML : draw table using innerHTML

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列,但是没有用。 有人知道这个问题吗???

几年前,我也遇到了这个问题。

问题是,当您使用innerHTML属性添加HTML时,每次更新后,底层引擎都会为您关闭未关闭的标签(并修复其他错误的HTML)。 因此,在第二行之后, <table><tr>标记将自动关闭,之后的所有内容都将被写入表的外部。


方法1 (简单方法)

使用字符串存储整个表的HTML,并立即更新所有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属性。 从最新规格来看,后者通常会贬值。

Mozilla开发人员网络是开始学习CSS的重要资源

小提琴


方法3 (长远来看,但从长远来看最好)

使用jQuery

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

小提琴

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

但是,在循环中重复更新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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM