我对以下数据表使用自定义过滤...
var table = $('#placeholder').DataTable({
"bJQueryUI":true,
"bFilter": true,
"bPaginate": true,
"bLengthChange": false,
"pageLength": 25,
"bDeferRender": true,
"bSortClasses": false,
"data": {$data} // nette injected
});
以便仅显示与第2列值相关的唯一行...
var rows = [];
$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
// Retrieve info for unique row filtering
// If value is set, then unique filtering is enabled
var filterUVal = parseInt($('#frm-filterForm-unique').val());
var columnDVal = data[2];
// Filter unique row
if (!isNaN(filterUVal)) {
if (~rows.indexOf(columnDVal)) {
return false;
} else {
rows.push(columnDVal);
}
}
return true;
});
如果我根据任何列排序并因此应用过滤器,那么它可以工作。但是,如果我首先应用自定义过滤器并根据任何列进行排序,那么所有行都会消失,我只看到空的数据表。
答案 0 :(得分:1)
这是因为永远不会重置rows
。考虑一下,最终data[2]
将包含所有唯一rows
值,因此无论搜索项如何,每行都返回false。
我相信您可以通过在draw
处理程序中重置$('#placeholder').on('draw.dt', function() {
rows = []
})
来解决此问题:
get ':param', to: :show, controller: 'pages'