Datatables-仅应用于某些表的筛选器

Datatables - filter applied to just some tables

本文关键字:筛选 应用于 Datatables-      更新时间:2024-04-27

在数据表中,有一个过滤函数

$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex)

过滤所有表。

我有两个表,我只需要将过滤器应用于其中一个表。

如何让Datatables知道我只想过滤table1并保持table2原样?

从DataTables创建者中查看此片段。

https://www.datatables.net/forums/discussion/16623/using-fn-datatableext-afnfiltering-push-to-filter-tables

$.fn.dataTableExt.afnFiltering.push(
    function(settings, aData, iDataIndex) {
        if (settings.nTable.id === 'myTableId') {
            // filter example
        } else {
            // ...
        }
    }
);

您可以检查要筛选的表的id。这不是一个官方的解决方案,但它是有效的。

我在其他地方找到了一个帮助我的答案:

https://stackoverflow.com/a/11545376/4896102

刚刚在功能中添加了这个

//array with the tables IDs you want the filtering function to ignore
var allowFilter = ['yourTableId1', 'youTableId2'];
$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) 
{
    // check if current table is part of the allow list
    if ($.inArray(oSettings.nTable.getAttribute('id'), allowFilter ) == -1 )
    {
       // if not table should be ignored
       return true;
    }
    //rest of the code
    return false;
});

这个对我很有用,它的优点是可以使用数组,这样在筛选时可以忽略多个表。

您可以使用API的DataTables .search().draw()方法。请参阅在线文档

var dt1 = $('#table1').DataTable();
dt1.search('search text').draw();

另见工作小提琴

作为附录,我只想提到在1.10+DataTables中,有两种方法可以初始化表:.dataTable().DataTable()。第二个返回新的API,这就是我上面使用的内容。如果使用第一个,您仍然可以使用$( selector ).dataTable().api()检索新的API,如在线文档