2016-06-12 8 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'プロパティでインデックスを取得できます。または、図書館特有のものについて質問していますか? –

+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') 
関連する問題