问题描述
使用数据表插件。我的表数据是正确的。我想过滤该数据:
(过滤器代码)
else if (input.value == "IncorrectQuantity") {
table
.columns().search('')
.column(4).search('Ok',true,false)
.columns([7,8])
.data()
.filter(function (value,index) {
console.log(value);
return value[0] != value[1] ? true : false;
})
.draw();
}
我从 console.log(value)
(第 7 列 + 第 8 列数据)得到的输出是:
所以我不想显示带有(17-17 和 15-15)的行。我原以为 value[0]
是第一行,value[1]
是第二行,
但是不,如果我做 console.log(value[0])
,我会得到 3 and null
。所以我不知道如何实际比较第 7 列和第 8 列的值。
编辑
遵循@frenchy 的回答
/*
table
.columns().search('') //clear other searchs
.column(4).search('Ok',false) //search column 4 value = "Ok"
.flatten() //reduces 2D array structures to 1D structure
.data() //provides access to Data
.filter(function (value,index) { //filter won't actually change which rows are displayed [https://datatables.net/reference/api/filter()]
console.log(value.quantity,value.quantityArrival); //value will be an object so i can access it's properties directly
return value.quantity != value.quantityArrival; //value.quantity = Column 7 && value.quantity = Column 8
})
.draw();*/
//SOLUTION - Custom Filter
$.fn.dataTable.ext.search.push(
function (settings,data,dataIndex) {
console.log(data); //Will print entire row
return data[7] != data[8]; //values for column 7 and 8
}
);
table
.columns().search('') //clear other searchs
.column(4).search('Ok',false) //search column 4 value = "Ok"
.draw();
$.fn.dataTable.ext.search.pop(); //apply custom filter:only display row if column7!=column8
解决方法
按照你说的,value 是一个数组,第一个值是 col7,第二个是 col8,所以,语法似乎是:
.columns([7,8]).flatten()
.data()
.filter(function (value,index) {
console.log(value[0] != value[1],index);
return value[0] != value[1];
})
使用自定义过滤器
else if (input.value == "IncorrectQuantity") {
$.fn.dataTable.ext.search.push(
function(settings,data,dataIndex) {
return data[0] != data[1];
}
);
table
.columns().search('')
.column(4).search('Ok',true,false)
.columns([7,8]).flatten()
.data()
.draw();
$.fn.dataTable.ext.search.pop();