【问题标题】:Get index of sorted row?获取排序行的索引?
【发布时间】:2016-10-12 22:35:11
【问题描述】:

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

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

【问题讨论】:

  • 如果您的意思是 <tr> 元素,您始终可以使用 .rowIndex 属性获取索引。或者您是在询问特定于图书馆的事情?
  • @squint:是的,它特定于DataTables

标签: javascript sorting datatables html-table


【解决方案1】:

您可以在当前{ search: 'applied' } 顺序中迭代every() 行,从而计算出您正在查找的值所在的当前页面。这是一个寻找特定名称的说明性​​示例:

$('#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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多