我的表是本地的,从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();
但我不能让它发挥作用:(
答案 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;
});