获取排序行的索引?

时间:2016-06-12 12:00:27

标签: javascript sorting datatables html-table

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);
}

如果表格处于初始排序顺序,它将完美运行。但是,当应用过滤器或排序时,这会失败。这里有什么简单的解决方案?

1 个答案:

答案 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')