我尝试使用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();
}
});
答案 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