我正在尝试取一个由javascript 2D数组创建的HTML表,我正在尝试在表中获得总和的总和,不包括顶部行,而第一个TD在每行。
var pandlarray = [
[2017-04,0,-118.05,-181.21,-400.43,0]
[2017-05,1510.27,-35.34,-180.99,-351.46,0]
];
// BEGIN - Create HTML table from javascript array.
function makeTableHTML(myArray) {
var result = "<table id='pandltable'>";
result += "<tr><td>Month</td><td>Revenue</td><td>MaterialCost</td><td>Utilities</td><td>Labor</td><td>Margin</td></tr>";
for(var a=0; a<myArray.length; a++) {
result += "<tr>";
for(var j=0; j<myArray[a].length; j++){
if (myArray[a][j] === 0) {
result += "<td>"+0+"</td>";
}
else {
result += "<td>"+myArray[a][j]+"</td>";
}
}
result += "</tr>";
}
result += "<tr><td><strong>Total<strong></td><td></td><td></td><td></td><td></td><td></td></tr></table>";
return result;
}
document.write(makeTableHTML(pandlarray));
// END - Create HTML table from javascript array.
// BEGIN - Total row and columns for pandltable.
$("#pandltable tr:not(:first,:last) td:last-child").text(function(){
var t = 0;
$(this).prevAll().each(function(){
t += t += parseFloat($(this).text(),0) || 0;
});
return t;
});
$("#pandltable tr:last td:not(:first)").text(function(i){
var t = 0;
$(this).parent().prevAll().find("td:nth-child("+(i + 2)+")").each(function(){
t += parseFloat($(this).text(),0) || 0;
});
return t;
});
// END - Total row and columns for pandltable.
不是我知道的最美丽的代码,但这是我必须使用的。现在返回到每行总和列的值远远不到右,它们也显示出重复的小数。请帮助。
对您的数组定义进行了一些更改,并使表函数做出了一些更改。分配了"首先"到一个月列的类,以防止其在每行中添加。并使用.tofixed((函数将总数限制为两个小数点。第一个功能存在错误 - 计算每一行总数 - t = t = - 这可能是错字。
var pandlarray = ["2017-04,0,-118.05,-181.21,-400.43,0",
"2017-05,1510.27,-35.34,-180.99,-351.46,0"
];
// BEGIN - Create HTML table from javascript array.
function makeTableHTML(myArray) {
var result = "<table id='pandltable'>";
result += "<tr><td width='20%'>Month</td><td width='20%'>Revenue</td><td width='20%'>MaterialCost</td><td width='20%'>Utilities</td><td width='20%'>Labor</td><td width='20%'>Margin</td></tr>";
for(var a=0; a<myArray.length; a++) {
var thisRow = myArray[a].split(",");
result += "<tr>";
for(var j=0; j<thisRow.length; j++){
if (j === 0) {
result += "<td class='first'>"+thisRow[j]+"</td>";
}
else {
result += "<td>"+thisRow[j]+"</td>";
}
}
result += "</tr>";
}
result +="<tr><td colspan=6> </td> </tr>";
result += "<tr><td><strong>Total<strong></td><td></td><td></td><td></td><td></td><td></td></tr></table>";
return result;
}
document.write(makeTableHTML(pandlarray));
// END - Create HTML table from javascript array.
// BEGIN - Total row and columns for pandltable.
$("#pandltable tr:not(:first,:last) td:last-child").text(function(){
var t = 0;
$(this).prevUntil(".first").each(function(){
t += parseFloat($(this).text(),2) || 0;
});
t = t.toFixed(2);
return t;
});
$("#pandltable tr:last td:not(:first)").text(function(i){
var t = 0;
$(this).parent().prevAll().find("td:nth-child("+(i + 2)+")").each(function(){
t += parseFloat($(this).text(),0) || 0;
});
t = t.toFixed(2);
return t;
});
// END - Total row and columns for pandltable.