【问题标题】:How to dynamically calculate the total of each column in a table on an HTML page?如何动态计算 HTML 页面上表格中每一列的总和?
【发布时间】:2017-12-16 18:25:39
【问题描述】:

我基本上会有一个包含星期几的表格(跨标题行)。 第 1 列 - 星期日第 2 列 - 星期一 等。每个单元格都将输入工作时间,即 8。 最后一行我希望每个单元格在将数据输入每个单元格后,动态计算其列中其上方单元格的总数。理想情况下,这应该在将光标移动到不同的单元格后计算。

看来我应该为此使用一些 JavaScript。但是我不能从头开始编写 JavaScript;我只能在编写完成后将其调整为我需要的内容。

为了我们的目的,这里有一个基本表格。我将在第 1 列 中放置示例。

<table id="workweek" class="wwtable">
<tr><th>sunday</th><th>monday</th><th>tuesday</th><th>wednesday</th><th>thursday</th><th>friday</th><th>saturday</th></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>8 </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td>(Calculate 40 here) </td><td> </td><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
</table>

忘了说。每个单元格都会让用户输入每天的小时数,因此每个单元格中都会有输入字段。

【问题讨论】:

    标签: javascript html html-table cell calculated-columns


    【解决方案1】:

    如果 jQuery 对您来说是一个可行的选择,您可以像这样遍历给定列中的所有 td

    $('#workweek>tbody>tr>td:nth-child(1)').each( function(){
        sum += parseInt($(this).text()) || 0;
    });
    

    我已经为你整理了一个工作示例on jsFiddle

    for (var i=1; i<8; i++)
    {
        var sum = 0;
    
        // iteration through all td's in the column
        $('#workweek>tbody>tr>td:nth-child(' + i + ')').each( function(){
            sum += parseInt($(this).text()) || 0;
        });
    
        // set total in last cell of the column
        $('#workweek>tbody>tr>td:nth-child(' + i + ')').last().html(sum);
    }
    

    请注意,如果该列的最后一个单元格不为空,此示例将删除该列最后一个单元格的内容。

    【讨论】:

      【解决方案2】:

      您可以遍历表格的 DOM,并获取每个单元格的 textContentinnerText 作为小时值。

      这是一种流行的方法:

      function strip(html) {
          var tmp = document.createElement("DIV");
          tmp.innerHTML = html;
          return tmp.textContent||tmp.innerText;
      }
      

      然后(类似这样):工作示例:http://jsfiddle.net/7srJf/3/

      var tbl = document.getElementById('my-table');
      var rows = tbl.rows;
      var DAYS_OF_WEEK = 2, totals = [0, 0];
      for (var i = 0; i < DAYS_OF_WEEK; i++) { 
          for (var j = 1; j < rows.length; j++) {
            var cell = rows[j].cells[i];
            var numHours = parseInt(strip(cell.innerHTML), 10);
            totals[i] += numHours;
          }
      }
      

      【讨论】:

      • 我忘了补充,表格中的每个单元格都是用户输入的,所以需要一种离开单元格后计算的方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-11
      • 2019-04-25
      • 2023-04-04
      • 2021-12-18
      • 1970-01-01
      • 2018-01-04
      相关资源
      最近更新 更多