DataTables.Net 给出 7 列的总和

DataTables.Net To Give Sum For 7 Columns

通过阅读 DataTables.net wiki,我发现了如何将总计添加到一列,即下面语法中的第 4 列,所以我相信具有丰富 JQuery 经验的人可以轻松适应显示对我来说第 6 - 12 列的总数。

这是为第 4 列添加总计的基本设置 - 要为其他列添加总计需要更改什么?

https://datatables.net/examples/advanced_init/footer_callback.html

    $(document).ready(function() {
    $('#example').DataTable( {
        "footerCallback": function ( row, data, start, end, display ) {
            var api = this.api(), data;

            // Remove the formatting to get integer data for summation
            var intVal = function ( i ) {
                return typeof i === 'string' ?
                    i.replace(/[$,]/g, '')*1 :
                    typeof i === 'number' ?
                        i : 0;
            };

            // Total over all pages
            total = api
                .column( 4 )
                .data()
                .reduce( function (a, b) {
                    return intVal(a) + intVal(b);
                }, 0 );

            // Total over this page
            pageTotal = api
                .column( 4, { page: 'current'} )
                .data()
                .reduce( function (a, b) {
                    return intVal(a) + intVal(b);
                }, 0 );

            // Update footer
            $( api.column( 4 ).footer() ).html(
                '$'+pageTotal +' ( $'+ total +' total)'
            );
        }
    } );
} );

一些快速重构允许具有任何列号的可调用函数。你会注意到我:

  1. column 4 所用的功能包装成一个函数 表示要汇总的列的参数 colNum
  2. 然后我将新函数中出现的所有 4 替换为 colNum
  3. 继续调用新创建的函数 定义。

$(document).ready(function() {
  $('#example').DataTable({
    "footerCallback": function(row, data, start, end, display) {
      var api = this.api(),
        data;

      // Remove the formatting to get integer data for summation
      var intVal = function(i) {
        return typeof i === 'string' ?
          i.replace(/[$,]/g, '') * 1 :
          typeof i === 'number' ?
          i : 0;
      };
      var totalColumn = function(colNum) {
        // Total over all pages
        total = api
          .column(colNum)
          .data()
          .reduce(function(a, b) {
            return intVal(a) + intVal(b);
          }, 0);

        // Total over this page
        pageTotal = api
          .column(colNum, {
            page: 'current'
          })
          .data()
          .reduce(function(a, b) {
            return intVal(a) + intVal(b);
          }, 0);

        // Update footer
        $(api.column(colNum).footer()).html(
          '$' + pageTotal + ' ( $' + total + ' total)'
        );
      }
      totalColumn(6);
      totalColumn(7);
      //...snip...
    }
  });
});