質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

732閲覧

jqueryで【表示切替】と【ソート】がぶつかり、作動してくれない問題

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/04/05 20:52

下記の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});

これらの【表示切替】と【ソート】を仲睦まじく手を取り合って機能させるような呪文をご存じの方はいらっしゃいましたらご教示いただければと思い質問させて頂きました。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ごちゃっとしてあまり見てませんが、ソート時にabc_listの要素が削除されているような気がします。以下のようにするとうまくいくかもしれません。

JavaScript

1 // jQuery要素をイベント内で取得 2 $('.check').change(function(){ 3 var abc_list = $("#t1 thead tr th:not(:first-child), #t1 tbody tr td:not(.name)"); 4 ...

投稿2018/04/05 22:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/06 02:30

おっしゃるとおりでした。助かりました。どうもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問