jQuery数据表 - 如何使用filter()?

时间:2015-11-19 12:26:28

标签: javascript jquery datatables

我尝试使用https://datatables.net/reference/api/filter()但没有效果。 我想通过单击复选框来过滤列。

代码:

var table = $('#table').DataTable();

var filteredData = table
    .column( 0 )
    .data()
    .filter( function ( value, index ) {
        return value > 4000 ? true : false;
    } );

$("#show_only_packed").click(function() {
    if ($(this).is(":checked")) {
        filteredData.draw();
    }
});

实际上我使用了search(),但我想了解如何使用filter()

$("#show_only_packed").click(function() {
    if ($(this).is(":checked")) {
        table.column( 3 ).search( 'Spakowano' ).draw();
    } else {
        table.column( 3 ).search('').draw();
    }
});

2 个答案:

答案 0 :(得分:2)

  

<强>原因

API方法filter()经常与search()混淆,但它不会影响表格。它只根据给定的条件返回过滤的数据。

  

<强>解

您需要改为使用custom filtering

例如:

$('#show_only_packed').on('click', function(){
   if(this.checked){
      $.fn.dataTable.ext.search.push(
         function (settings, data, dataIndex){
            return (data[0] > 4000) ? true : false;
         }
      );
   }

   table.draw();

   if(this.checked){
      $.fn.dataTable.ext.search.pop();    
   }
});
  

<强>样本

请参阅this jsFiddle以获取代码和演示。

答案 1 :(得分:1)

好吧,filter() 不应该search()功能混淆。 filter()实际不会在您的表格上产生任何直接输出,但可以在幕后操纵数据

假设您的表中有一个人员列表,其年龄为其中一个属性。你的目标是计算这一组中的老年人(超过60岁)。然后使用这样的过滤器很容易:

var filteredData = table.column(3)
    .data()
    .filter(function (value, index) {
    if (parseInt(value) > 60) {
        eldersCount++;
    }
});

在这里,我们将年龄列定义为第3列(基于零的索引),我们进行操作......

以下是fiddle