下記のjqueryでテーブルに【表示切替】と【ソート】の機能を持たせています。
それぞれは独立して機能するのです。けれど、【ソート】してからだと、【表示切替】が効かなくなるのです。
▼動くサンプル
https://jsfiddle.net/qwba8r09/
▼そのコード
html
1<!-- チェックリスト --> 2<ul class="list"> 3 <li> 4 <input id="a" class="check" name="chk_alphabet" value="a" type="checkbox"> 5 <label for="a" class="check_label">a</label> 6 </li> 7 <li> 8 <input id="b" class="check" name="chk_alphabet" value="b" type="checkbox"> 9 <label for="b" class="check_label">b</label> 10 </li> 11 <li> 12 <input id="c" class="check" name="chk_alphabet" value="c" type="checkbox"> 13 <label for="c" class="check_label">c</label> 14 </li> 15</ul> 16 17<!-- テーブル --> 18<table id="t1"> 19 <thead> 20 <tr> 21 <th class="name">名前</th> 22 <th class="1 a">➀a</th> 23 <th class="2 b">➁b</th> 24 <th class="3 b c">➂a/c</th> 25 <th class="4 a b c">➃a/b/c</th> 26 <th class="5 a c">⑤a/c</th> 27 </tr> 28 </thead> 29 <tbody> 30 <tr> 31 <td class="name">鈴木</td> 32 <td class="a">12</td> 33 <td class="b">19</td> 34 <td class="b c">605</td> 35 <td class="a b c">47</td> 36 <td class="a c">23</td> 37 </tr> 38 <tr> 39 <td class="name">高橋</td> 40 <td class="a">25</td> 41 <td class="b">89</td> 42 <td class="b c">57</td> 43 <td class="a b c">50</td> 44 <td class="a c">64</td> 45 </tr> 46 <tr> 47 <td class="name">佐藤</td> 48 <td class="a">60</td> 49 <td class="b">987</td> 50 <td class="b c">9</td> 51 <td class="a b c">25</td> 52 <td class="a c">89</td> 53 </tr> 54 <tr> 55 <td class="name">山田</td> 56 <td class="a">604</td> 57 <td class="b">78</td> 58 <td class="b c">25</td> 59 <td class="a b c">3</td> 60 <td class="a c">140</td> 61 </tr> 62 </tbody> 63</table>
javasctip
1//////////////////// 2////【表示切替】チェックしたものを含む列だけ表示 3(function($){ 4 //対象一覧を取得 5 var abc_list = $("#t1 thead tr th:not(:first-child), #t1 tbody tr td:not(.name)"); 6 7 //チェックボックスのチェック状態により作動 8 $('.check').change(function(){ 9 //チェックされているボックスの情報を全て取る 10 var alphabet = $('.check:checked').map(function() { 11 return $(this).val(); 12 }); 13 14 //半角スペースで結合 15 if(alphabet.length == 0){ 16 abc_list.css('display', 'none'); 17 }else{ 18 //対象一覧をループ 19 for(i=0;i<abc_list.length;i++){ 20 hasCount = 0; 21 for(alphabeti=0;alphabeti<alphabet.length;alphabeti++){ 22 if($(abc_list[i]).hasClass(alphabet[alphabeti])){ 23 hasCount++; 24 } 25 } 26 if(hasCount==alphabet.length){ //チェックされたもの全て持っていれば表示 27 $(abc_list[i]).css('display', 'table-cell'); 28 }else{ 29 $(abc_list[i]).css('display', 'none'); 30 } 31 } 32 } 33 }); 34 35})(jQuery); 36 37 38//////////////////// 39//【ソート】名前clickで横にソート 40$(function(){ 41 $('#t1 tbody td').filter(function(){ 42 return $(this).closest('tr').find('td').index(this)==0; 43 }).on('click',function(){ 44 var list=$(this).siblings('td').map(function(x){return {idx:x+1,num:parseInt($(this).text())}}).get(); 45 list.sort(function(x,y){ 46 if(x["num"]==y["num"]) return 0; 47 return x["num"]>y["num"]?1:-1; 48 }); 49 $(this).closest('table').find('tr').each(function(){ 50 var self=$(this); 51 list.forEach(function(x){ 52 self.find('td,th').eq(x["idx"]).clone().appendTo(self); 53 }); 54 self.find('td,th').filter(':gt(0):lt('+list.length+')').remove(); 55 }); 56 }); 57});
これらの【表示切替】と【ソート】を仲睦まじく手を取り合って機能させるような呪文をご存じの方はいらっしゃいましたらご教示いただければと思い質問させて頂きました。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/06 02:30