Javascript Datatable函数,用于筛选列中低于值的项

Javascript Datatable函数,用于筛选列中低于值的项,javascript,jquery,datatables,Javascript,Jquery,Datatables,我试图创建一个按钮,当单击该按钮时,它会过滤我的datatable,其中特定列小于6。我正在尝试制作一个示例,但由于缺乏编程/Javascript知识,我有点挣扎 谢谢你的帮助 function filterBelowSix() { var maxScore = 6; var totalScoreField = parseFloat( data[3] ); // use data for the total score column i think thi

我试图创建一个按钮,当单击该按钮时,它会过滤我的
datatable
,其中特定列小于6。我正在尝试制作一个示例,但由于缺乏编程/Javascript知识,我有点挣扎

谢谢你的帮助

    function filterBelowSix() {
        var maxScore = 6;
        var totalScoreField = parseFloat( data[3] ); // use data for the total score column i think this the column index
        var table = $('#customer_df').DataTable();

        if (maxScore <= totalScoreField) {
            return true;
        } else { return false;}


       // how do i pass if else statement to table, so then i can order by specific columns after its been filtered? 
        table.order([8,'desc' ],[3,'asc']).draw();
     
    }
函数filterBelowSix(){
var maxScore=6;
var totalScoreField=parseFloat(数据[3]);//将数据用于总分列我认为这是列索引
var table=$('#customer_df')。DataTable();

如果(maxScore,则可以使用链接示例中提到的相同过滤函数:

$.fn.dataTable.ext.search.push()
将其与按钮的单击事件以及所需的排序API调用相结合,可以得到以下结果:

$(document).ready(function() {

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

  // register the click event for our button
  // I prefer doing this as opposed to using onclick in the button itself
  $( "#below_x" ).click(function() {
    filterBelowValue();
  });

  // the filter followed by a sort and table re-draw:
  function filterBelowValue() {
    var threshold = 60; // or whatever you want
    var colIdx = 3; // 4th column (first col has index of 0)

    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        return (data[colIdx] < threshold);
      }
    );

    table.column( colIdx ).order( 'asc' ).draw();
  }

} );
事件处理程序:

$( "#reset" ).click(function() {
  doReset();
});
以及
doReset
功能:

function doReset() {
    
  $.fn.dataTable.ext.search.push(
    function( settings, data, dataIndex ) {
      return true; // show all rows!
    }
  );
  table.column( 0 ).order( 'asc' ).draw();
}
  function filterBelowValue() {
    var threshold = 60; // or whatever you want
    var colIdx = 3; // 4th column (first col has index of 0)

    while($.fn.dataTable.ext.search.length > 0) {
      $.fn.dataTable.ext.search.pop();
    }

    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        return (data[colIdx] < threshold);
      }
    );
    table.column( colIdx ).order( 'asc' ).draw();

  }

  function doReset() {
    while($.fn.dataTable.ext.search.length > 0) {
      $.fn.dataTable.ext.search.pop();
    }
    
    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        return true; // show all rows!
      }
    );
    table.column( 0 ).order( 'asc' ).draw();
  }
但是,如上所述,这将把第二个函数推到过滤器函数数组上,而第二个函数将不会像预期的那样工作,因为第一个函数(过滤数据的函数)仍然存在

因此,我们必须首先清除函数数组:

while($.fn.dataTable.ext.search.length > 0) {
  $.fn.dataTable.ext.search.pop();
}
此片段需要放在filter函数和all clear函数之前:

function doReset() {
    
  $.fn.dataTable.ext.search.push(
    function( settings, data, dataIndex ) {
      return true; // show all rows!
    }
  );
  table.column( 0 ).order( 'asc' ).draw();
}
  function filterBelowValue() {
    var threshold = 60; // or whatever you want
    var colIdx = 3; // 4th column (first col has index of 0)

    while($.fn.dataTable.ext.search.length > 0) {
      $.fn.dataTable.ext.search.pop();
    }

    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        return (data[colIdx] < threshold);
      }
    );
    table.column( colIdx ).order( 'asc' ).draw();

  }

  function doReset() {
    while($.fn.dataTable.ext.search.length > 0) {
      $.fn.dataTable.ext.search.pop();
    }
    
    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        return true; // show all rows!
      }
    );
    table.column( 0 ).order( 'asc' ).draw();
  }
函数filterBelowValue(){
var threshold=60;//或任何您想要的
var colIdx=3;//第四列(第一列的索引为0)
而($.fn.dataTable.ext.search.length>0){
$.fn.dataTable.ext.search.pop();
}
$.fn.dataTable.ext.search.push(
功能(设置、数据、数据索引){
返回(数据[colIdx]<阈值);
}
);
table.column(colIdx).order('asc').draw();
}
函数doReset(){
而($.fn.dataTable.ext.search.length>0){
$.fn.dataTable.ext.search.pop();
}
$.fn.dataTable.ext.search.push(
功能(设置、数据、数据索引){
返回true;//显示所有行!
}
);
表.column(0).order('asc').draw();
}

Thank you@andrewjames这是一个有效的快速问题,我尝试使用
函数reset_test(){var table=$('.#customer_df').DataTable();table.search('..draw();}添加一个重置按钮以删除过滤器
但它现在似乎不起作用了……有什么想法吗?我添加了一些额外的信息,介绍如何重置过滤器。感谢您解释此过程,非常有用。我希望我能将此答案再次选中为正确答案。:)
  function filterBelowValue() {
    var threshold = 60; // or whatever you want
    var colIdx = 3; // 4th column (first col has index of 0)

    while($.fn.dataTable.ext.search.length > 0) {
      $.fn.dataTable.ext.search.pop();
    }

    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        return (data[colIdx] < threshold);
      }
    );
    table.column( colIdx ).order( 'asc' ).draw();

  }

  function doReset() {
    while($.fn.dataTable.ext.search.length > 0) {
      $.fn.dataTable.ext.search.pop();
    }
    
    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        return true; // show all rows!
      }
    );
    table.column( 0 ).order( 'asc' ).draw();
  }