小ネタ tablesorterをデフォルトで複数行ソートにする
ほんとは今日はSeam2.1.0GAのRSSサポートを技術検証しようと思ってたのですが、
さっき帰宅したばっかりなので今日は小ネタだけにします。
jQueryプラグインのtablesorterは、shiftキーを押しながらヘッダ行をクリックすると
複数行ソート、そのまま押せば単一行ソートになります。
では、はじめから複数行ソートだけにしたい時はどうすれば良いか?
そのまま真っ正直に使おうとするとこれは実現できません。もちろん改造すればOKですが、
できれば改造なしで複数行ソートをデフォルトにしたいものです。
tablesorterには"sortMultiSortKey"というオプションがあります。これは、複数行ソートする
ためのキーはどれにしますか?というもので、デフォルトは"shiftkey"になっています。
この値はjs内でイベントオブジェクト(window.event)に使われます。
問題の部分のjsはこのようになっています。
// user only whants to sort on one column if(!e[config.sortMultiSortKey]) { // flush the sort list config.sortList = []; if(config.sortForce != null) { var a = config.sortForce; for(var j=0; j < a.length; j++) { if(a[j][0] != i) { config.sortList.push(a[j]); } } } // add column to sort list config.sortList.push([i,this.order]); // multi column sorting } else { // the user has clicked on an all ready sortet column. if(isValueInArray(i,config.sortList)) { // revers the sorting direction for all tables. … } … }
「if(!e[config.sortMultiSortKey]) {」が常にelseを通るようにすれば良いので、
解決方法は「sortMultiSortKeyにtypeと設定する」になります。
クリックというイベントは必ず発生しているからです。
本家サイトのサンプルの書き方を真似れば
$(document).ready(function() { $("#myTable").tablesorter( {sortMultiSortKey: 'type'} ); } );
となる、という事ですね。これでデフォルトで複数行ソートになります。