2016-06-12 60 views
1

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

如果你的意思是一個''元素,你總是可以通過'.rowIndex'屬性獲得索引。或者你在問圖書館特有的東西嗎? – 2016-06-12 12:03:01

+0

@squint:是的,它特定於[DataTables](https://datatables.net/)。 – Claudiu

回答

0

您可以在當前{ 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')