###■やりたいこと
次のようなテーブルがあるとき、縦の列でなく、横の行でソートしたいです。
(鈴木の行をクリックすると、数学の列が左に、国語の列は右になってほしい。)
html
1<table> 2 <thead> 3 <tr> 4 <th data-type="string">名前<span></span></th> 5 <th data-type="integer">国語<span></span></th> 6 <th data-type="integer">数学<span></span></th> 7 </tr> 8 </thead> 9 <tbody> 10 <tr class="dothesort"> 11 <td>鈴木</td><td>12</td><td>9</td> 12 </tr> 13 <tr class="dothesort"> 14 <td>佐藤</td><td>25</td><td>89</td> 15 </tr> 16 <tr class="dothesort"> 17 <td>高橋</td><td>1</td><td>987</td> 18 </tr> 19 <tr class="dothesort"> 20 <td>山田</td><td>604</td><td>78</td> 21 </tr> 22 </tbody> 23</table>
###■やってみたコード
次のjavascriptではうまくいかず、検索しても行ソートというのは見つからず、困ってしまいました。
方法をご存知の方がいらっしゃいましたらどうぞよろしくお願い致します。
javascript
1$(function(){ 2 3//並び替え順を設定 4var sortOrder = 1; //1:昇順, -1:降順 5//行をクリックしたら 6 $('.dothesort').click(function(){ 7 8 var type = $(this).data('type'); 9 var col = $(this).index(); //0, 1 ... 10 11 //行全体を取得 12 var $rows = $('tbody > tr'); 13 14 //行を並び替え(点数で) 15 $rows.sort(function(a,b){ 16 return compare(a, b, type)*sortOrder; 17 18 var arrow.empty.append($rows); 19 20 var arrow = sortOrder === 1 ? “→":"←"; 21 $(‘.dothesort > span').text(''); 22 $(this).find('span').text(arrow) 23 //並び替え順を反転 24 sortOrder *= -1; 25 }); 26 27 function compare(a, b, type, col){ 28 var _a = $(a).find('td').eq(col).text() *1; 29 var _b = $(b).find('td')eq(col).text() *1; 30 31 if(type == “string"){ 32 if(_a < _b) 33 return -1; 34 } 35 if(_a > _b){ 36 return 1; 37 } 38 return 0; 39 } else { 40 _a *= 1; 41 _b *= 1; 42 return _a - _b 43 } 44 45 } 46 47});
▼動くサンプル
https://jsfiddle.net/q9n0exx8/
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/02 01:48
退会済みユーザー
2018/04/02 04:11 編集
2018/04/02 05:28
退会済みユーザー
2018/04/02 08:31