jQuery DataTablesでソート順を初期化したい
jQuery DataTables
Tableをソートしたり検索したりしてくれるにくいやつ
thをクリックするとソートしてくれるけど
ASCとDESCの切り替えだけで、初期値に戻してくれない。
初期表示時のソート無効は、
"order": []
でいける
やりたかったのは、昇順→降順→初期値
で三回クリックでリセットしたかった
探したところ
- https://datatables.net/forums/discussion/17910/three-states-of-a-header-sort-decoration
- https://datatables.net/forums/discussion/14933/column-sorting-reset-on-third-click
- https://datatables.net/forums/discussion/1440/how-to-reset-clear-sorting
公式フォーラムを見ても該当しそうなコードはなかった。
ヒントあった
開発者っぽい人が並び順を初期値に戻す拡張機能を作っていた
$.fn.dataTable.Api.register( 'order.neutral()', function () { return this.iterator( 'table', function ( s ) { s.aaSorting.length = 0; s.aiDisplay.sort( function (a,b) { return a-b; } ); s.aiDisplayMaster.sort( function (a,b) { return a-b; } ); } ); } );
最終的なコード
var descParam=false; var oTable = $('#dataTable').DataTable({ "order": [] }); $('#dataTable').on( 'order.dt', function () { var order = oTable.order(); if(order.length > 0){ if(order[0][1]=='desc') { descParam=true; }else if(order[0][1]=='asc'&&descParam==true){ descParam = false; oTable.order.neutral().draw(); }else{ descParam=false; } } } );
on('order.dt')でなんか並び順変更してるイベントを参照できるっぽい
order[0][1]にdescとかascとか入るからdescの時に変数trueにして次ascになった時に変数trueだったら
並び順初期化するfuntion呼んでdraw()してテーブルに反映すると
やりたかったことが実装できた