如何将过滤器应用于特定数据表

Ast*_*aut 18 javascript jquery jquery-plugins datatables

是否可以将某个过滤器仅应用于一个数据表?我有以下过滤器功能,我正在申请文件准备,我不知道这是否是正确的程序,但作为副作用所有dataTables将受到过滤器的影响.我想仅影响$('#productTable'),但此选择器似乎没有所需的效果.

//Filter Function in Stock 
//$('#productTable').
$.fn.dataTableExt.afnFiltering.push(function(oSettings, aData, iDataIndex) {
    var checked = $('#instock').is(':checked');
    var qntStock = 1; 
    var stockCol = 3; 

    if (!checked) {
        return true;
    }
    if (checked && aData[stockCol] > qntStock) {
        return true;
    }

    return false;
 });
Run Code Online (Sandbox Code Playgroud)

是否可以仅对特定表应用过滤器?我该如何做到这一点?

编辑:

dataTable初始化:

var oTable = $('#productTable').dataTable({
        "aoColumnDefs": [{
            "sClass": "my_class", 
            "aTargets": [4]
            }],
        "bAutoWidth": false,
        "iDisplayLength": 100,
        "fnDrawCallback": function() {
            $("td.my_class").editable(function(value, settings) 
            { 
                return(value);
            }, 
            {
                indicator : 'Save...',
                tooltip   : 'Click to Edit...'
            }
            );
        }
    });
Run Code Online (Sandbox Code Playgroud)

Man*_*eUK 24

您可以创建一个包含过滤器的表数组 - 然后在过滤器中检查当前表是否存在于该数组中...类似于:

// setup an array of the ids of tables that should be allowed
var allowFilter = ['productTable'];

$.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;
    }
    var checked = $('#instock').is(':checked');
    var qntStock = 1; 
    var stockCol = 3; 

    if (!checked) {
        return true;
    }
    if (checked && aData[stockCol] > qntStock) {
        return true;
    }

    return false;
});
Run Code Online (Sandbox Code Playgroud)

  • 直接使用`oSettings`变量(`oSettings.nTable.getAttribute('id')`)是[不鼓励](https://datatables.net/reference/type/DataTables.Settings),因为它的内容是私有的API并且可能会在不发出警告的情 使用`var api = new $ .fn.dataTable.Api(settings);`然后使用`var tableId = api.table().node().id;`访问表的id. (2认同)

Jar*_*rry 7

你可以这样做:在配置中添加一个参数:

var oTable = $('#productTable').dataTable({
        "applyFilter":true,
        "aoColumnDefs": [{
            "sClass": "my_class", 
            "aTargets": [4]
            }],
        "bAutoWidth": false,
        "iDisplayLength": 100,
        "fnDrawCallback": function() {
            $("td.my_class").editable(function(value, settings) 
            { 
                return(value);
            }, 
            {
                indicator : 'Save...',
                tooltip   : 'Click to Edit...'
            }
            );
        }
    });
Run Code Online (Sandbox Code Playgroud)

然后,验证您的过滤器是否处于活动状态:

//Filter Function in Stock 
//$('#productTable').
$.fn.dataTableExt.afnFiltering.push(function(oSettings, aData, iDataIndex) {
    if(oSettings.applyFilter)
    {
        var checked = $('#instock').is(':checked');
        var qntStock = 1; 
        var stockCol = 3; 

        if (!checked) {
            return true;
        }
        if (checked && aData[stockCol] > qntStock) {
            return true;
        }

        return false;
    }
    else
        return true;
 });
Run Code Online (Sandbox Code Playgroud)