DataTables!=搜索

时间:2015-11-13 14:38:05

标签: datatables

var table = $('.dataTables-huntQueue').DataTable();
if($('#switch-mine').is(':checked')) {
    table.search( 'closed' ).draw();
} else {
    table.search( '' ).draw();
}

当我正在寻找的是'封闭'值时,上述效果很好。但我真正想要的是任何未关闭的东西。有没有 !我错过了吗?

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式:

table.search('^((?!(closed)).)*$', true, false, true).draw();

参数的含义是 - 请参阅search()的文档:

  • 的行包含"已关闭"
  • 的列
  • 这是一个正则表达式
  • 不"聪明"过滤,在这种情况下,它似乎无关紧要
  • 不区分大小写

通过API使用正则表达式的缺点是,您将在搜索/过滤器框中看到一个丑陋的无意义^((?!(closed)).)*$值。相反,你可以制作一个完全相同的custom filter

function notSearch(notString) {
    notString = notString.toLowerCase();
    $.fn.dataTable.ext.search.push(
       function(settings, data, dataIndex) {
           for (var i=0;i<data.length;i++) {
              if (data[i].toLowerCase().indexOf(notString)>-1) return false;
           }
           return true;
       }  
    )
    table.draw();
    $.fn.dataTable.ext.search.pop();
}

然后通过

调用它
notSearch('closed');

您甚至可以register上面的自定义过滤器,因此它显示为本机API的一部分:

jQuery.fn.dataTable.Api.register('notSearch()', function(notString) {
    notString = notString.toLowerCase();
    $.fn.dataTable.ext.search.push(
       function(settings, data, dataIndex) {
           for (var i=0;i<data.length;i++) {
              if (data[i].toLowerCase().indexOf(notString)>-1) return false;
           }
           return true;
       }  
    )
    table.draw();
    $.fn.dataTable.ext.search.pop();
})

table.rows().notSearch('closed');