在DataTables的上下文中,如何获取已排序行的索引?
我有一个分页,可排序,可过滤的表,其中列4
(即第5列)包含一个消息号。我正在编写一个函数,将当前页面切换为显示该消息编号的页面,并突出显示包含该条目的行。它看起来像这样:
var currentHighlight = null;
function goToMessageNumber(number) {
var table = $('#messages').DataTable();
// remove current highlight
if (currentHighlight) {
$(table.row(currentHighlight).nodes()).removeClass('highlight');
}
// find the row we need
var index = table.column(4).data().indexOf(''+number);
if (index === -1) {
return;
}
currentHighlight = index;
// add new highlight
$(table.row(currentHighlight).nodes()).addClass('highlight');
// go to page
var page = Math.floor(currentHighlight / table.page.len());
table.page(page).draw(false);
}
如果表格处于初始排序顺序,它将完美运行。但是,当应用过滤器或排序时,这会失败。这里有什么简单的解决方案?
答案 0 :(得分:0)
您可以按当前every()
顺序迭代{ search: 'applied' }
行,然后计算当前页面,其中显示您要查找的值。以下是寻找特定名称的说明性示例:
$('#goto').on('click', function() {
var page, data, count = 0;
table.rows( { search: 'applied' } ).every(function(rowIdx, tableLoop, rowLoop) {
count ++
data = this.data()
if (data[1] == 'Airi Satou') {
page = Math.floor(count / table.page.len())
table.page( page ).draw('page')
return
}
})
})
演示 - >的 http://jsfiddle.net/1o3fLcqy/ 强>
上面跳转到Airi Satou
所在的页面,无论排序/过滤如何(当前行中都假定Airi Satou
)。对第5列中的消息编号执行相同的操作。
关于操纵行/ <tr>
,rowIdx
保存原始索引。所以你可以这样做:
table.row(rowIdx).nodes().to$().addClass('highlight')