【问题标题】:DataTables.Net To Give Sum For 7 ColumnsDataTables.Net 给出 7 列的总和
【发布时间】:2017-08-10 17:51:52
【问题描述】:

通过阅读 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)'
            );
        }
    } );
} );

【问题讨论】:

    标签: jquery datatable datatables datatables-1.10


    【解决方案1】:

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

    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...
        }
      });
    });

    【讨论】:

    • 这是完整的语法还是只是示例?我问 bc run code sn -p throws error
    • sn-p 不知道 datatables.net 是什么,而且您没有提供任何 html 或其他来源。 sn-p 将不会在此环境中运行。这只是一个例子。
    • 在我的生产环境中运行它会给我一个错误:Uncaught TypeError: Cannot read property 'nTf' of undefined at t. (datatables.min.js:199) at t.iterator (datatables.min.js:175) 在 t. (datatables.min.js:199) 在 t. (datatables.min.js:179) 在 t.footer (datatables.min.js: 178) at totalColumn (ar-detail-summary:483) at n.fn.init.footerCallback (ar-detail-summary:491) at datatables.min.js:150 at Function.map (datatables.min.js:14 ) 在 s (datatables.min.js:150)
    • 在进行故障排除时,我从表格中删除了
      元素。一旦我添加回来,代码就会像预期的那样工作。
    猜你喜欢
    • 2015-03-11
    • 1970-01-01
    • 2015-05-05
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多