更新 1
虽然我同意 rtruszk,但我仍然认为如果 0) 您别无选择或 1) 您的客户不愿意讨论 UX 更改,则应该找到/探索解决方案。
工作示例: http://jsfiddle.net/ebRXw/63/
我能够通过从 DataTable 中过滤掉当前可见的行来完成您的任务。我尽力在 DataTables 中找到一个解决方案,可能存在一个,但最后我使用 jQuery 和哈希表来识别和过滤掉当前可见的行。
我相信这可以进一步优化。希望它能让你朝着正确的方向前进。
$(document).ready(function () {
var table = $('#example').DataTable({
"columnDefs": [{
"targets": [0],
"visible": false,
"searchable": true
}]
});
// Show page 0
table.page(0).draw(false);
// Sort by column 1 (Name)
table.order([1, 'asc']).draw(false);
$("#ReloadTable").click(function () {
// Clear the current filter
oTable = $('#example').dataTable();
oTable.fnFilter('', 0);
oTable.fnFilter('');
// Reset all "visible" values in the first cell
var table = $('#example').DataTable();
table.rows().indexes().each(function (idx) {
var d = table.row(idx).data();
table.row(idx).data()[0] = 0;
d.counter++;
table.row(idx).data(d);
});
});
$("#FilterCurrentPage").click(function () {
// Create a hash of the index of currently visible rows
var h = new Object();
var x = $('.odd,.even').filter(function () {
var idx = $(this)[0]._DT_RowIndex;
h[idx] = idx;
return this.style.display == ''
});
// update the first value based on the currently visible rows
var table = $('#example').DataTable();
table.rows().indexes().each(function (idx) {
var d = table.row(idx).data();
if (h.hasOwnProperty(idx)) {
table.row(idx).data()[0] = 1;
}
d.counter++;
table.row(idx).data(d);
});
// filter rows with a value of 1 in the first cell
oTable = $('#example').dataTable();
oTable.fnFilter(1, 0);
});
});
更新 0
我还没有找到解决方法,但我确信存在解决方法。下面的代码将选择并返回数据表中当前可见的行。
var x = $('.odd,.even').filter(function () {
$(this).addClass('selected'); // Select the visible rows
return this.style.display == ''
});
From the DataTables maintainer:
有没有一种简单的方法可以告诉数据表我只想对当前分页进行排序和重绘?
在 DataTables 1.9 中 - 不,没有
这样做的方式,但在 1.10 中你可以使用 table.order( ... ).draw(
错误的 );保留分页。 1.10 pre beta 可以在 git 中使用,如果你
想给它一个狂欢:-)
艾伦
通过datatables: sort only current pagination of table
但是,您也许能够获取当前可见的行,对它们进行排序,然后以某种方式显示它们。下面的代码提供了过滤后的当前可见行。
var table = $('#example').DataTable();
table.$('tr', {"filter":"applied"});
另见: