DataTables:页脚不会根据搜索更新

Posted

技术标签:

【中文标题】DataTables:页脚不会根据搜索更新【英文标题】:DataTables: Footer doesn't get updated depending on the search 【发布时间】:2020-01-29 04:25:21 【问题描述】:

使用 JQuery 数据表,特别是下面的函数来汇总特定列中的总数

footerCallback: function ( row, data, start, end, display ) 
    var api = this.api();
    // 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 i;
    for (i = 27; i <=122; i++)  
        if (api.column(i).data().length)
            var total = api.column( i ).data().reduce( function (a, b) 
                return intVal(a) + intVal(b);
                ) 
            
        else  
            total = 0
        ;

        // Update footer
        $( api.column(i).footer() ).html(total);
    
,

到目前为止一切正常,显示总计。

但是,当我搜索带有 table.columns(12).search('No',true,false).draw(); 之类的列时,页脚不会更新。

我读过https://datatables.net/forums/discussion/41651/should-footercallback-be-called-when-clearing-a-search-filter,它说调用draw(),它应该得到更新,但它没有

有什么建议吗?

【问题讨论】:

【参考方案1】:

您需要为所有column() API 方法调用指定第二个参数selector-modifier,并在检索列数据时使用 search:'applied' 应用搜索。默认情况下,当您使用column() API 方法时,DataTables 不会应用搜索。

例如:

var data = api.column(i,  search:'applied' ).data();
if (data.length)
    var total = data.reduce( function (a, b) 
        return intVal(a) + intVal(b);
    );
 else  
    total = 0;

【讨论】:

以上是关于DataTables:页脚不会根据搜索更新的主要内容,如果未能解决你的问题,请参考以下文章

在页脚中使用过滤器进行列搜索 - 页脚过滤器未显示 - Laravel Datatables Yajrabox

JQuery Datatables 数据不会更新

jQuery DataTables:隐藏搜索栏

使用 jquery.dataTables 从 observableArray 中删除项目后 UI 不更新

页脚中的 DataTables.net 表列总和

datatables 根据值得不同添加颜色