前提・実現したいこと
タブ切り替え機能があり、その切り替えタブの中にラジオボタンでカテゴリー分けが出来る機能を作りました。
今回実現したい事を簡潔に言うと、
ラジオボタン部分が未選択の場合は、リストタグ部分のコンテンツが全て表示されるようにしたいです。
現状では、例えば
野菜タブクリック → 野菜aクリックで野菜aだけ表示され、野菜b,野菜cは非表示になります。
そしてその状態で続けて、果物タブクリック → 果物aクリックすると、果物タブラジオボタンが未選択の状態にも関わらず、果物aだけが表示され、果物b,果物cが非表示のままです。
この際に、果物b,果物cも表示された状態のままにしておきたいです。
少しややこしいですが、お分かりの方いれば力を貸していただけると嬉しく思います。
よろしくお願いします....
該当のソースコード
html
1 <ul class="tab"> 2 <li class="active"><a href="#tab1" >すべて表示</a></li><!--タブ切り替えボタン--> 3 <li><a href="#tab2">野菜タブ</a></li><!--タブ切り替えボタン--> 4 <li><a href="#tab3">果物タブ</a></li><!--タブ切り替えボタン--> 5 </ul> 6 7 8<div class="tabContents active" id="tab1"> 9 <div class="link-card-wrap"> 10 <ul class="link-card-list"> 11<li data-group="a"><a href="single-example1.html">コンテンツa</li> 12<li data-group="b"><a href="single-example1.html">コンテンツa</li> 13<li data-group="c"><a href="single-example1.html">コンテンツa</li> 14 </ul> 15</div><!--link-card-wrap--> 16</div> 17 18 19<div class="tabContents active" id="tab2"> 20<div class="radio-btn-wrap"> 21<label> 22<input class="radio-input is-active" type="radio" name="kind" value="野菜a" data-group="a">野菜a<!--カテゴリーラジオボタン--> 23</label> 24<label> 25<input class="radio-input is-active" type="radio" name="kind" value="野菜b" data-group="a">野菜b<!--カテゴリーラジオボタン--> 26</label> 27<label> 28<input class="radio-input is-active" type="radio" name="kind" value="野菜c" data-group="a">野菜c<!--カテゴリーラジオボタン--> 29</label> 30</div> 31 32 <div class="link-card-wrap"> 33 <ul class="link-card-list"> 34<li data-group="a"><a href="single-example1.html">野菜a</li> 35<li data-group="b"><a href="single-example1.html">野菜b</li> 36<li data-group="c"><a href="single-example1.html">野菜c</li> 37 </ul> 38</div><!--link-card-wrap--> 39</div> 40 41<div class="tabContents active" id="tab3"> 42<div class="radio-btn-wrap"> 43<label> 44<input class="radio-input is-active" type="radio" name="kind" value="果物a" data-group="a">果物a<!--カテゴリーラジオボタン--> 45</label> 46<label> 47<input class="radio-input is-active" type="radio" name="kind" value="果物b" data-group="a">果物b<!--カテゴリーラジオボタン--> 48</label> 49<label> 50<input class="radio-input is-active" type="radio" name="kind" value="果物c" data-group="a">果物c<!--カテゴリーラジオボタン--> 51</label> 52</div> 53 <div class="link-card-wrap"> 54 <ul class="link-card-list"> 55<li data-group="a"><a href="single-example1.html">果物a</li> 56<li data-group="b"><a href="single-example1.html">果物a</li> 57<li data-group="c"><a href="single-example1.html">果物a</li> 58 </ul> 59</div><!--link-card-wrap--> 60</div> 61
js
1タブ切り替え部分 2 3 $(function() { 4 $(".tab a").click(function() { 5 $(this).parent().addClass("active").siblings(".active").removeClass("active"); 6 var tabContents = $(this).attr("href"); 7 $(tabContents).addClass("active").siblings(".active").removeClass("active"); 8 return false; 9 }); 10 }); 11
js
1ラジオボタン(カテゴリー分け部分) 2 3 var searchItem = '.radio-input'; // 絞り込む項目を選択するエリア 4 var listItem = '.list-item'; // 絞り込み対象のアイテム 5 var hideClass = 'is-hide'; // 絞り込み対象外の場合に付与されるclass名 6 var activeClass = 'is-active'; // 選択中のグループに付与されるclass名 7 8 $(function() { 9 // 絞り込みを変更した時 10 $(searchItem).on('click', function() { 11 $(searchItem).removeClass(activeClass); 12 var group = $(this).addClass(activeClass).data('group'); 13 search_filter(group); 14 }); 15 }); 16 17 /** 18 * リストの絞り込みを行う 19 * @param {String} group data属性の値 20 */ 21 function search_filter(group) { 22 // 非表示状態を解除 23 $(listItem).removeClass(hideClass); 24 // 値が空の場合はすべて表示 25 if(group === '') { 26 return; 27 } 28 // リスト内の各アイテムをチェック 29 for (var i = 0; i < $(listItem).length; i++) { 30 // アイテムに設定している項目を取得 31 var itemData = $(listItem).eq(i).data('group'); 32 // 絞り込み対象かどうかを調べる 33 if(itemData !== group) { 34 $(listItem).eq(i).addClass(hideClass); 35 } 36 } 37 } 38
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/22 12:30
2021/03/22 13:09