如何筛选多个列但修改其中一个列的输入?

时间:2018-01-12 18:01:04

标签: jquery datatables

我的表是本地的,从HTML表中读取数据。我试图在所有表上使用单个外部输入作为过滤器,这非常有效:

$('.data-table').DataTable({
  columns: [
    null,
    null,
    null,
    null,
    { orderable: false }
  ]
});

$(document).on('input', 'input.filter', function () {
  var searchTerm = this.value

  $('.data-table').DataTable().search(searchTerm).draw();
});

但我现在不能做的是仅在应用于第一列时修改searchTerm。它应该未经修改地与表的其余部分进行比较。我尝试了自定义搜索功能,但如果它不是我需要自定义功能的列,我不明白如何跳过它:

$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
  var columnVal = data[0]
  var input = $('input.filter').val()

  if (input) {
    // This comparison should only apply on the first column.
    return columnVal == input.slice(1)
  } else {
    return true
  };
});

例如,当用户输入'K123'时,对整个表进行搜索或过滤应使用'K123',但我想将第一列与切片输入(特别是'123')匹配。

According to the author正确的方法(没有自定义过滤器)应该是这样的:

var input = $('input.filter').val()

table
  .search( input )
  .column( 0 ).search( input.slice(1) )
  .draw();

但我不能让它发挥作用:(

1 个答案:

答案 0 :(得分:1)

数据应该是一个包含行的所有数据的数组。您可能还想在其上调用splice以删除第一个,具体取决于您的需要。

$.fn.dataTable.ext.search.push(function(settings, data, dataIndex){      
    var input = $('input.filter').val(), firstColumnVal = "";
    if (input) {
        firstColumnVal = input.slice(1);
    }
    var firstColumnData = data[0];
    if (!input) 
        return true;
    else 
        return firstColumnVal === firstColumnData || data.indexOf(input) > -1;   
});