Datatables 数据表“;页脚回调&x201D;函数不在页脚的两列中显示结果(仅在一列中)

Datatables 数据表“;页脚回调&x201D;函数不在页脚的两列中显示结果(仅在一列中),datatables,datatables-1.10,Datatables,Datatables 1.10,我试着使用我现有的代码,该代码只适用于一列和,以使和显示在两列中-我试着将它们放入数组中,但它不起作用。是否不可能使用简单的阵列解决方案来解决此问题 这是 这是JS: $(document).ready(function() { var table = $('#example').DataTable( { rowReorder: { selector: 'td:nth-child(2)' }, responsive: true, scrollX: true, s

我试着使用我现有的代码,该代码只适用于一列和,以使和显示在两列中-我试着将它们放入数组中,但它不起作用。是否不可能使用简单的阵列解决方案来解决此问题

这是

这是JS:

 $(document).ready(function() {
var table = $('#example').DataTable( {
    rowReorder: {
    selector: 'td:nth-child(2)'
  },
  responsive: true,
  scrollX: true,
  scrollY: "80vh",
    scrollCollapse: true,
        paging: true,
  lengthChange: false,
  lengthMenu: [ [10, 25, -1], [10, 25, "All"] ],
  "order": [[ 0, "asc" ]],
  "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( [3,4] )
            .data()
            .reduce( function (a, b) {
                return intVal(a) + intVal(b);
            }, 0 );

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

        // Update footer
        $( api.column( [3,4] ).footer() ).html(
            total
        );
    },
    buttons: ['pdf']
} );

table.buttons().container()
    .appendTo( '#example_wrapper .small-6.columns:eq(0)' );
}); $(document.foundation()

因为我希望对不止一列进行汇总,我现在是否需要为每个列使用额外的插件?即使是那个插件,我也找不到一个例子,上面有多个我可以复制和轻松定制的专栏

代码与我所拥有的非常不同,让我感到困惑。另外

工作示例:

如果我理解正确,您希望在两列中得到相同的总和。这很容易实现,你不需要插件

首先,您的一行(编号8)中有一行的“Tokyo”而不是工资数字。这就是为什么您的jsfiddle中有$NaN

其次,
api.column()
用于选择单个列。要选择多个列,只需将函数调用设为复数,
api.columns([3,4])
就可以了。在您提供的JSFIDLE中,您只有4列,这意味着您没有第4列索引,所以我这样做了

$( api.columns([2,3]).footer() ).html(
    '$'+total
);
文件组织良好:

编辑:每个列页脚都包含自己的总和

基本上,您需要对每一列分别执行求和操作。 将两列的总和合并到一个变量中对您没有帮助

var sumColumns = [3,4]

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

    // Update footer
    $( api.columns(colIndex).footer() ).html(
        total
    );
})

Eric,我很抱歉小提琴没有保存我制作的更新版本。请参见新保存的:您应该只看到3行,并且总和应该是两个单独的总和-在2列中不相同。我将函数调用设为复数,但现在到处都是零。。你能再看一眼吗?现在一切都好了,谢谢你!只是想知道为什么要将第一部分移到上面:“$(document).ready(function(){”?“//Remove the formatting to get integer data for summation”部分不能在“$(document).ready(function(){”之后才能执行操作?声明函数独立于“ready”文档吗。如果在文档准备就绪之前调用该函数,并且该函数依赖于文档,则会遇到问题。由于此函数不依赖于文档,因此没有问题。您只需声明此函数一次,就可以调用它10亿次。“footerCallback”函数被调用多次。因此如果“intVal”如果将其放在“footerCallback”中,则每次都会重新定义该函数,这是不必要的。