首页 文章

jQuery Datatables - 在单元格中使用类的Sum列

提问于
浏览
1

我试图在datatables.net表(第5,6,7列)中总结几列,以便在每列的页脚中显示该列的总和 .

问题是在一个单元格中有多个值,其他单元格的值包含在span标记中 . 因此,总数显示为NaN

有没有办法使用footerCallback方法,不仅可以声明列,还可以声明类?

或者什么是使列总和的最佳方法(并显示当前页面总和和所有页面的总和 - 这是footercallback方法发生的情况)

我尝试了许多不同的东西,包括声明变量,添加.cell(' . classname')和.cells(.'classname'),但没有任何东西返回总和 . 如果单元格中没有其他内容除了值之外它接缝工作正常,但这不是我的表的选项 .

这是我正在使用的数据表代码:

$(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(6)
            .data()
            .reduce(function (a, b) {
            return intVal(a) + intVal(b);
        });

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

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

});`

表格代码相当复杂,所以我创建了一个jsfiddle:http://jsfiddle.net/Ittavi/9p7tkqsn/

1 回答

  • 1

    你减少方法有问题 .

    reduce方法中的变量b不是数字(money),而是列中使用的标记

    $<span class=" addExpChangedClass amtField paymentparent1 sumamount" data-sort="1.00">1.00</span>

    脚步:

    • 我首先在 b.replace('$', '') 开始摆脱 $

    • 然后将字符串的其余部分转换为jQuery对象,以便可以提取值(即数量) $(b.replace('$', '')).text(); .

    最后它看起来像下面

    total = api.column(6)
      .data()
      .reduce(function(total, b) {
        b = $(b.replace('$', '')).text();
        return total + parseInt(b);
      }, 0);
    // Total over this page
    pageTotal = api.column(6, {
        page: 'current'
      })
      .data()
      .reduce(function(total, b) {
        b = $(b.replace('$', '')).text();
        return total + parseInt(b);
      }, 0);
    

    这是更新的demo

    希望这可以帮助 .

相关问题