jquery.tablesorter.jsで順序カラムをソートしない
tableタグで表示された表をソートするjQueryプラグインtablesorterはとても便利です。
jquery.tablesorter.js : http://tablesorter.com/docs/
WEBシステムを制作していると、こういった表を扱い機会が多く、また、顧客よりソートの要望が必ず出てきます。表データは大方がデータベース等から取り出すと思いますので、単純に考えるとORDER BYすれば良いのですが、余計なページ読込が発生します。
jquery.tablesorter.jsはページを再読込するのではなく、HTML上で完結するのでサーバーにもユーザーにも優しいですね。
基本的なサンプル
$(document).ready(function() { $("#myTable").tablesorter(); });
#myTableをテーブルに設定します。
<table id="myTable"> <thead> <tr> <th>お名前</th> <th>都道府県</th> <th>年齡</th> <th>誕生日</th> </tr> </thead> <tbody> <tr> <td>山田</td> <td>北海道</td> <td>25</td> <td>01/01</td> </tr> <tr> <td>佐藤</td> <td>東京都</td> <td>42</td> <td>02/01</td> </tr> <tr> <td>鈴木</td> <td>京都府</td> <td>18</td> <td>04/01</td> </tr> <tr> <td>田中</td> <td>沖縄県</td> <td>42</td> <td>03/01</td> </tr> </tbody> </table>
なお、クリックした項目タイトルの背景色を変更するCSSは以下のような感じです。
#myTable th{ cursor: pointer; background: #E6E6E6; } #myTable th.headerSortUp { background: #FFF09E; } #myTable th.headerSortDown { background: #D1DF9C; }
ここまでではあちこちで紹介されていますが、今回お客様からご相談があったのは、表の左端に連番を表示し、かつ、どの項目でソートしても連番はソートしたくないというものでした。
表の連番はソートせず、常に連番として表示させる
公式サイトを読んでもそういった機能は無さそう(或いは英文なので読み切れてない)なので、思案した結果、ソートの度にNo.を連番で書き換えるという事にしました。ただ、THをクリックした際にon clickイベントが発火してくれないようなので、jquery.tablesorter.jsに書き加える事にしました。
jquery.tablesorter.js (715行目付近)
// apply event handling to headers // this is to big, perhaps break it out? $headers.click( function (e) { //studio key ----------- setTimeout(function(){ var n=1; $(".th_number").each(function(){ var num = ( '00000' + n ).slice( -3 ); $(this).text(num); n++; }); },100); //studio key -----------
連番のカラムを以下にようにします。
<td class="th_number">001</td>
$headers.clickがtablesorterのイベント発生箇所なので、そこでth_numberを書き換える処理を加えました。また、イベント発生と同時だと連番付けが発火出来ない、或いは打ち消される?ようなので、setTimeoutで0.1秒遅らせています。
こういった要望は少ないかもしれませんが、参考程度に。