【问题标题】:DataTables != search数据表!=搜索
【发布时间】:2015-11-13 14:38:05
【问题描述】:
var table = $('.dataTables-huntQueue').DataTable();
if($('#switch-mine').is(':checked')) {
    table.search( 'closed' ).draw();
} else {
    table.search( '' ).draw();
}

当我正在寻找的只是“关闭”值时,上述方法非常有用。但我真正想要的是任何没有关闭的东西。有没有 !我错过了这里的运营商?

【问题讨论】:

  • 您能否详细说明您的问题。您的表是服务器端还是客户端?你到底想做什么?
  • 客户端。在浏览器中呈现。我在浏览器中向客户端显示了一个 6 列的表。用户将希望查看所有未关闭项目的列表。目前...我可以显示的是已关闭的列表。对用户的用处不大!
  • 你所说的关闭是什么意思,关闭和打开是动态的吗?

标签: datatables


【解决方案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');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多