2013-10-02 104 views
0

我正在编写一个脚本,它创建一个包含4列的表格。这些列是N,N * 10,N * 100N * 1000。我设法创造了前两列,但现在我被卡住了。我应该如何重构我的代码?使用JavaScript动态创建表格

var n; 
var m1 = 10; 
var m2 = 100; 
var m3 = 1000; 

document.writeln("<table>"); 
document.writeln("<h1>Calculating Compound Interest</h1>"); 
document.writeln("<thead><tr><th>N</th>"); 
document.writeln("<th>N * 10</th>"); 
document.writeln("<th>N * 100</th>"); 
document.writeln("<th>N * 1000</th>"); 
document.writeln("</tr></thead><tbody>"); 

for (var number = 1; number <= 5; number++) { 
    n = number * m1; 

    if (number % 2 !== 0) 
     document.writeln("<tr class='oddrow'><td>" + number + 
         "</td><td>" + n.toFixed(0) + "</td></tr>"); 
    else 
     document.writeln("<tr><td>" + number + 
         "</td><td>" + n.toFixed(0) + "</td></tr>"); 
} 

document.writeln("</tbody></table>"); 
+2

你有这么远 - 我想你应该能够弄明白。 – 2013-10-02 03:37:30

+0

您可以使用数组来保存乘数并循环并计算 - http://jsfiddle.net/9ztbS/ – dchhetri

+0

请考虑基于模板的数据绑定解决方案,而不是手动循环动态html。研究Jquery模板,KnockoutJs或类似的工具 – TGH

回答

1

for循环更改到以下几点:

for (var number = 1; number <= 5; ++number) 
{ 
    n = number * m1; 
    if (number % 2 !== 0) 
     document.writeln("<tr class='oddrow'><td>" + number + "</td>"); 
    else 
     document.writeln("<tr><td>" + number + "</td>"); 

    document.writeln("<td>" + n.toFixed(0) + "</td>"); 
    n = number * m2; 
    document.writeln("<td>" + n.toFixed(0) + "</td>"); 
    n = number * m3; 
    document.writeln("<td>" + n.toFixed(0) + "</td></tr>"); 
    } 
+0

谢谢Afshin我知道了:) – user1471038

0

你必须添加两个TD的,你会把的number*2结果和number*m3

另外我想使用的innerHTML为您推荐写出完整的所需html而不是每次都使用document.writeIn

请参阅 The Solution on js fiddle

var n; 
var m1 = 10; 
var m2 = 100; 
var m3 = 1000; 

var heading_html = "<h1>Calculating Compound Interest</h1>" ;  
var tbable_html = "<table border=1>"; 

tbable_html += "<thead><tr><th>N</th>"; 
tbable_html += "<th>N*10</th>"; 
tbable_html += "<th>N*100</th>"; 
tbable_html += "<th>N*1000</th>"; 
tbable_html +="</tr></thead><tbody>"; 
for (var number = 1; number <= 5; ++number) { 
    n1 = number * m1; 
    n2 = number * m2; 
    n3 = number * m3; 
    if (number % 2 !== 0) 
     tbable_html +="<tr class='oddrow'><td>" + number + "</td><td>" + 
n1.toFixed(0)+"</td><td>"+n2.toFixed(0)+"</td><td>"+n3.toFixed(0)+"</td></tr>"; 
    else 
     tbable_html +="<tr><td>" + number + "</td><td>" + n1.toFixed(0) + 
"</td><td>" + n2.toFixed(0) + "</td><td>" + n3.toFixed(0) + "</td></tr>"; 
} 
tbable_html +="</tbody></table>"; 

document.write(heading_html+tbable_html); 
0

试试这个:

var n = [1, 2, 3, 4, 5].reduce(function (string, n) { 
    return string + "<tr class='" + (n % 2 ? "oddrow" : "evenrow") + "'>" + 
      [n, 10 * n, 100 * n, 1000 * n].reduce(td, "") + "</tr>"; 
}, ""); 

document.body.innerHTML += "<table><thead><tr>" + 
    "<th>N</th><th>N * 10</th><th>N * 100</th><th>N * 1000</th>" + 
    "</tr></thead><tbody>" + n + "</tbody></table>"; 

function td(string, n) { 
    return string + "<td>" + n + "</td>"; 
} 

观看演示:http://jsfiddle.net/7uPVH/


如果你不想使用.reduce,那么你可以把上面的代码如下:

var n = ""; 

for (var i = 1; i <= 5; i++) { 
    n += "<tr class='" + (i % 2 ? "oddrow" : "evenrow") + "'>"; 

    n += "<td>" + i + "</td>"; 
    n += "<td>" + 10 * i + "</td>"; 
    n += "<td>" + 100 * i + "</td>"; 
    n += "<td>" + 1000 * i + "</td>"; 

    n += "</tr>"; 
} 

document.body.innerHTML += "<table><thead><tr>" + 
    "<th>N</th><th>N * 10</th><th>N * 100</th><th>N * 1000</th>" + 
    "</tr></thead><tbody>" + n + "</tbody></table>"; 

查看演示:http://jsfiddle.net/7uPVH/1/