使用JavaScript在HTML表中的行和列的总和不包括第一个和最后一个



我正在尝试取一个由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>&nbsp;</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.

相关内容

最新更新