将数据表过滤仅应用于一个表

Ban*_*ana 2 datatable jquery

我正在使用每个类名称的自定义过滤。我的页面上也有两个不同的dataTables,但是似乎要添加的过滤器适用于两个dataTables。我想指定它实际应用于哪一个。

$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) {
  var myRowClasses = oSettings.aoData[iDataIndex].nTr.className.split(" ");
  if($("#subplayers").is(":checked")) {
    return myRowClasses.indexOf('insub') > -1;
  } else {
    return myRowClasses.indexOf('allplayers') > -1;
  }         
});
Run Code Online (Sandbox Code Playgroud)

此过滤器适用于两个表(具有表1 tabledata和具有id的表2 tabledata2)。如何修改此代码以使其仅在表1上起作用?

表格代码:

var table = $('#tabledata').DataTable({
  'fnCreatedRow': function (nRow, aData, iDataIndex) {
    $(nRow).attr('id', 'col' + iDataIndex+'_filter');
    if (initatedTable){
      $(nRow).addClass("insub");
      $(nRow).addClass("allplayers");
    }
  }
});

var table2 = $('#tabledata2').DataTable({
  'fnCreatedRow': function (nRow, aData, iDataIndex) {
    $(nRow).attr('id', 'col' + iDataIndex+'_filter');
   }
});
Run Code Online (Sandbox Code Playgroud)

Emr*_*lat 5

您需要像这样向您的过滤器功能添加if检查;

$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) {
  if (settings.nTable.id === 'tabledata') {
     // filter example
  }
  else {
    // ...
  }        
});
Run Code Online (Sandbox Code Playgroud)

在此示例中,if (settings.nTable.id === 'tabledata')line将解决问题。

  • 此外,如果您不想对其他表进行任何自定义过滤,则需要 *return true;* (2认同)