DataTables - 过滤和比较多列
DataTables - Filtering and Comparing on Multiple Columns
使用 DataTables 插件。我的 Table 数据是正确的。我想这样过滤数据:
- 显示第 4 列值等于 'Ok' 的行(有效)
- 这些行仅显示第 7 列值与第 8 列值不同的行(这不起作用)
(过滤代码)
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)
(column7 + column8 数据)得到的输出是:
所以我不想显示带有(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', true, 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', true, false) //search column 4 value = "Ok"
.draw();
$.fn.dataTable.ext.search.pop(); //apply custom filter:only display row if column7!=column8
按照你说的,值是一个数组,第一个值是 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();
使用 DataTables 插件。我的 Table 数据是正确的。我想这样过滤数据:
- 显示第 4 列值等于 'Ok' 的行(有效)
- 这些行仅显示第 7 列值与第 8 列值不同的行(这不起作用)
(过滤代码)
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)
(column7 + column8 数据)得到的输出是:
所以我不想显示带有(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', true, 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', true, false) //search column 4 value = "Ok"
.draw();
$.fn.dataTable.ext.search.pop(); //apply custom filter:only display row if column7!=column8
按照你说的,值是一个数组,第一个值是 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();