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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

2577閲覧

jQueryを使用した複数条件での絞り込みについて、「すべて」の挙動を加えたい

mekadoq

総合スコア10

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2017/04/30 11:01

編集2017/04/30 12:42

こちらのソースを元に作成しているのですが、下記の条件に合わせてアレンジしようとしています。
「attribute」「type」のどちらにもそれぞれに対応する「すべて」をつけた場合、jqueryがうまくできませんでした。
https://jsfiddle.net/jwqyan5j/2/

・「attribute」「type」の2つの条件で絞り込むAND検索
・デフォルトで「attribute」「type」どちらも「すべて」にチェックがはいっている。
・リストには「attribute〇〇」と「type〇〇」の2つのクラスが入っている。
・「attribute01」にチェックを入れると「attribute01」のクラスがついたものだけが表示される。(type〇〇はすべて表示対象)
・「type01」にチェックを入れると「type01」のクラスがついたものだけが表示される。(attribute〇〇はすべて表示対象)

html

1<div id="search"> 2 <ul id="attribute"> 3 <li><label class="selected"><input type="checkbox" id="all_attribute" class="sort" checked="checked">すべて</label></li> 4 <li><label><input type="checkbox" id="attribute01" class="sort">attribute01</label></li> 5 <li><label><input type="checkbox" id="attribute02" class="sort">attribute02</label></li> 6 <li><label><input type="checkbox" id="attribute03" class="sort">attribute03</label></li> 7 <li><label><input type="checkbox" id="attribute04" class="sort">attribute04</label></li> 8 <li><label><input type="checkbox" id="attribute05" class="sort">attribute05</label></li> 9 </ul> 10 11 <ul id="type"> 12 <li><label class="selected"><input type="checkbox" id="all_type" class="sort" checked="checked">すべて</label></li> 13 <li><label><input type="checkbox" id="type01" class="sort">type01</label></li> 14 <li><label><input type="checkbox" id="type02" class="sort">type02</label></li> 15 <li><label><input type="checkbox" id="type03" class="sort">type03</label></li> 16 <li><label><input type="checkbox" id="type04" class="sort">type04</label></li> 17 <li><label><input type="checkbox" id="type05" class="sort">type05</label></li> 18 <li><label><input type="checkbox" id="type06" class="sort">type06</label></li> 19 <li><label><input type="checkbox" id="type07" class="sort">type07</label></li> 20 <li><label><input type="checkbox" id="type08" class="sort">type08</label></li> 21 </ul> 22 23</div><!-- /.#search --> 24 25<ul id="list"> 26 <li class="attribute01 type01"><a href="#">attribute01 type01</a></li> 27 <li class="attribute03 type02"><a href="#">attribute03 type02</a></li> 28 <li class="attribute02 type05"><a href="#">attribute02 type05</a></li> 29 <li class="attribute05 type06"><a href="#">attribute05 type06</a></li> 30 <li class="attribute03 type07"><a href="#">attribute03 type07</a></li> 31 <li class="attribute04 type04"><a href="#">attribute04 type04</a></li> 32 <li class="attribute03 type02"><a href="#">attribute03 type02</a></li> 33 <li class="attribute04 type08"><a href="#">attribute04 type08</a></li> 34 <li class="attribute01 type03"><a href="#">attribute01 type03</a></li> 35 <li class="attribute02 type02"><a href="#">attribute02 type02</a></li> 36</ul>

javascript

1$( function() { 2 $( '#search li label input:not(#all_attribute)' ).click( function() { 3 var inputkey = [ 'attribute', 'type' ] 4 , i, l = inputkey.length 5 , $res, $tmp, res = [] 6 , $all = $( '#all_attribute' ); 7 ; 8 $tmp = $( '#list > li' ).removeClass( 'active' ); 9 for ( i = 0; i < l; i++ ) { 10 res = [] 11 $( '#search input[id^="' + inputkey[ i ] + '"]:checked' ).each( function() { 12 res.push( $( this )[ 0 ].id ); 13 } ); 14 if ( !res.length ) { continue; } 15 $tmp = $( '#list > li.' + res.join( ', #list > li.' ) ); 16 if ( !$res || !$res.length ) { 17 $res = $tmp; 18 } else if ( $tmp.length ) { 19 $res = $res.filter( '.' + res.join( ', .' ) ); 20 } 21 } 22 if ( $res && $res.length ) { 23 $res.addClass( 'active' ); 24 $all.prop( 'checked', false ); 25 } else { 26 // No Selected 27 res = false; 28 $all.prop( 'checked', true ); 29 } 30 } ); 31 $( '#all_attribute' ).click( function() { 32 if ( $( this ).prop( 'checked') === true ) { 33 $( '#list > li' ).removeClass( 'active' ); 34 $( '#search input:checked:not(#all_attribute)' ).prop( 'checked', false ); 35 } 36 } ); 37 $( '#search li label input:not(#all_type)' ).click( function() { 38 var inputkey = [ 'attribute', 'type' ] 39 , i, l = inputkey.length 40 , $res, $tmp, res = [] 41 , $all = $( '#all_attribute' ); 42 ; 43 $tmp = $( '#list > li' ).removeClass( 'active' ); 44 for ( i = 0; i < l; i++ ) { 45 res = [] 46 $( '#search input[id^="' + inputkey[ i ] + '"]:checked' ).each( function() { 47 res.push( $( this )[ 0 ].id ); 48 } ); 49 if ( !res.length ) { continue; } 50 $tmp = $( '#list > li.' + res.join( ', #list > li.' ) ); 51 if ( !$res || !$res.length ) { 52 $res = $tmp; 53 } else if ( $tmp.length ) { 54 $res = $res.filter( '.' + res.join( ', .' ) ); 55 } 56 } 57 if ( $res && $res.length ) { 58 $res.addClass( 'active' ); 59 $all.prop( 'checked', false ); 60 } else { 61 // No Selected 62 res = false; 63 $all.prop( 'checked', true ); 64 } 65 } ); 66 $( '#all_type' ).click( function() { 67 if ( $( this ).prop( 'checked') === true ) { 68 $( '#list > li' ).removeClass( 'active' ); 69 $( '#search input:checked:not(#all_type)' ).prop( 'checked', false ); 70 } 71 } ); 72} );

css

1.active { 2 background-color: red; 3} 4 5#search { 6 overflow: hidden; 7} 8#search > ul { 9 float: left; 10}

以下、追記いたします。

https://jsfiddle.net/mekadoq/m5z9hezb/2/

上記URLのように、2つある「すべて」のidをそれぞれ「all_attribute」「all_type」として、javascriptもそれぞれに対応させようとしたところ、各選択肢にチェックをいれた際に「すべて」のチェックが外れません。
また、「.addClass( 'active' );」「.removeClass( 'active' );」が実行されなくなってしまいました。

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

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

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

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

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

shi_ue

2017/04/30 11:07

「jqueryがうまくできませんでした」とはどういう状況ですか?また、id="all"がダブっていますが、おかしくないですか?
mekadoq

2017/04/30 11:21

idを別のものにして、色々ためしてみたのですが、「.addClass( 'active' );」「.removeClass( 'active' );」の挙動がうまくならなかったので、どのように書けばいいのか悩んでおります。
kei344

2017/04/30 11:33

「うまくならなかった」とは「何をしたときに」「どうなると思って」「どうなったのか」を、出ているエラーなどと併せて、具体的に記述されたほうが回答を得られやすいと思います。
shi_ue

2017/04/30 12:26

「idを別のものにして、色々ためしてみた」のでしたら、質問のソースも直していただけないでしょうか。他サイトを見ないとソースが分からなのはどうかと思います。
mekadoq

2017/04/30 12:42

ありがとうございます。質問欄のhtmlとjavascriptを改めまました。
guest

回答2

0

ざっとやってみました
一部HTMLもいじってます

CSS

1#search {overflow: hidden;} 2#search > ul { float: left;}

javascript

1$(function() { 2 $('#all_attribute,#all_type').prop('checked',true).on('change',function(){ 3 $($(this).attr('id')=='all_attribute'?'.attr':'.type').prop('checked',$(this).prop('checked')).trigger('change'); 4 }).trigger('change'); 5 $('.attr,.type').on('change',function(){ 6 $('#list li').hide(); 7 $('.attr,.type').each(function(){ 8 if($(this).prop('checked')){ 9 $('#list li.'+$(this).attr('id')).show(); 10 } 11 }); 12 }); 13}); 14

HTML

1<div id="search"> 2 <ul id="attribute"> 3 <li><label class="selected"><input type="checkbox" id="all_attribute" class="sort">すべて</label></li> 4 <li><label><input type="checkbox" id="attribute01" class="sort attr">attribute01</label></li> 5 <li><label><input type="checkbox" id="attribute02" class="sort attr">attribute02</label></li> 6 <li><label><input type="checkbox" id="attribute03" class="sort attr">attribute03</label></li> 7 <li><label><input type="checkbox" id="attribute04" class="sort attr">attribute04</label></li> 8 <li><label><input type="checkbox" id="attribute05" class="sort attr">attribute05</label></li> 9 </ul> 10 11 <ul id="type"> 12 <li><label class="selected"><input type="checkbox" id="all_type" class="sort">すべて</label></li> 13 <li><label><input type="checkbox" id="type01" class="sort type">type01</label></li> 14 <li><label><input type="checkbox" id="type02" class="sort type">type02</label></li> 15 <li><label><input type="checkbox" id="type03" class="sort type">type03</label></li> 16 <li><label><input type="checkbox" id="type04" class="sort type">type04</label></li> 17 <li><label><input type="checkbox" id="type05" class="sort type">type05</label></li> 18 <li><label><input type="checkbox" id="type06" class="sort type">type06</label></li> 19 <li><label><input type="checkbox" id="type07" class="sort type">type07</label></li> 20 <li><label><input type="checkbox" id="type08" class="sort type">type08</label></li> 21 </ul> 22 23</div><!-- /.#search --> 24 25<ul id="list"> 26 <li class="attribute01 type01"><a href="#">attribute01 type01</a></li> 27 <li class="attribute03 type02"><a href="#">attribute03 type02</a></li> 28 <li class="attribute02 type05"><a href="#">attribute02 type05</a></li> 29 <li class="attribute05 type06"><a href="#">attribute05 type06</a></li> 30 <li class="attribute03 type07"><a href="#">attribute03 type07</a></li> 31 <li class="attribute04 type04"><a href="#">attribute04 type04</a></li> 32 <li class="attribute03 type02"><a href="#">attribute03 type02</a></li> 33 <li class="attribute04 type08"><a href="#">attribute04 type08</a></li> 34 <li class="attribute01 type03"><a href="#">attribute01 type03</a></li> 35 <li class="attribute02 type02"><a href="#">attribute02 type02</a></li> 36</ul>

投稿2017/05/01 01:54

yambejp

総合スコア114775

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

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

0

$( '#search li label input:not(#all_attribute)' ) は下記を取得します。
0. id="attribute01" から id="attribute05"
0. id="type01" から id="type08"
0. id="all_type"

$( '#search li label input:not(#all_type)' ) は下記を取得します。
0. id="attribute01" から id="attribute05"
0. id="type01" から id="type08"
0. id="all_attribute"

でそれぞれにクリックイベントをつけているので、例えば id="attribute01" はクリックするたびに2つの関数が実行されます。

$( '#search input:checked:not(#all_attribute)' ).prop( 'checked', false ); には input#all_type が含まれます。

設計から見直してみてください。

投稿2017/04/30 15:30

編集2017/05/01 02:57
kei344

総合スコア69400

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問