jQueryを使って、タブ切り替えのフィルタリング機能を実装しようと考えております。
フィルターは「大カテゴリー」と「小カテゴリー」の2階層に分かれていて、「大カテゴリー」でフィルタリングした値を「小カテゴリー」フィルターを使用してさらに細分化表示が出来るようになっております。
大カテゴリーフィルターは以下の3種
・All
・大カテゴリーA
・大カテゴリーB
で、
いずれかのタブを選択した際には、さらに4項目の小カテゴリー用のタブが表示され、そちらを選択する事でそれぞれにカテゴライズされた値を表示します。
【大カテゴリーA選択時】
・A小カテゴリー1
・A小カテゴリー2
・A小カテゴリー3
・A小カテゴリー4
【大カテゴリーB選択時】
・B小カテゴリー1
・B小カテゴリー2
・B小カテゴリー3
・B小カテゴリー4
大カテゴリーAll選択時には、全ての値が表示される様になっています。
以下ソースです。
HML
1<div class="tab" style="text-align:center;"><!--大カテゴリーfilter--> 2 <a href="" data-filter="all" >ALL</a> 3 <a href="" data-filter="A">大カテゴリーA</a> 4 <a href="" data-filter="B">大カテゴリーB</a> 5</div> 6 7<div class="list"><!--ここから〜大カテゴリー値--> 8 <!--小カテゴリー All用フィルター--> 9 <!--data-filterで複数値の指定が出来ない為、機能していません。【課題2】--> 10 <div class="under-tab" data-category="" > 11 <a href="" data-filter="a1 b1">ALL時の小カテゴリー1</a> 12 <a href="" data-filter="a2 b2">ALL時の小カテゴリー2</a> 13 <a href="" data-filter="a3 b3">ALL時の小カテゴリー3</a> 14 <a href="" data-filter="a4 b4">ALL時の小カテゴリー4</a> 15 </div> 16 <!--小カテゴリー A用フィルター ※ALLの時は非表示にしたい【課題1】--> 17 <div class="under-tab" data-category="A" style="display:none;"> 18 <a href="" data-filter="a1">A小カテゴリー1</a> 19 <a href="" data-filter="a2">A小カテゴリー2</a> 20 <a href="" data-filter="a3">A小カテゴリー3</a> 21 <a href="" data-filter="a4">A小カテゴリー4</a> 22 </div> 23 <!--小カテゴリー B用フィルター ※ALLの時は非表示にしたい【課題1】--> 24 <div class="under-tab" data-category="B" style="display:none;"> 25 <a href="" data-filter="b1">B小カテゴリー1</a> 26 <a href="" data-filter="b2">B小カテゴリー2</a> 27 <a href="" data-filter="b3">B小カテゴリー3</a> 28 <a href="" data-filter="b4">B小カテゴリー4</a> 29 </div><!--ここまで〜大カテゴリー値--> 30 31 <ul class="under-list"><!--ここから〜小カテゴリー値--> 32 <li data-category="A a1">A-1</li> 33 <li data-category="B b1">B-1</li> 34 <li data-category="A a2">A-2</li> 35 <li data-category="B b2">B-2</li> 36 <li data-category="A a3">A-3</li> 37 <li data-category="B b3">B-3</li> 38 <li data-category="A a4">A-4</li> 39 <li data-category="B b4">B-4</li> 40 </ul><!--ここまで〜小カテゴリー値--> 41</div>
CSS
1.tab{ margin:30px 0 50px; } 2.tab a{ border:solid black 5px; padding:10px; } 3.under-tab{ text-align:center; margin:30px; } 4.under-tab a{ border:solid red 3px; padding:10px; } 5.under-tab:nth-child(2) a{ border:solid yellow 3px; } 6.under-tab:nth-child(3) a{ border:solid green 3px; }
jQuery
1$(function(){ 2 var $tab = $('.tab [data-filter]'),//大カテゴリーフィルター 3 $list = $('.list [data-category]'),//大カテゴリー値 4 $underTab = $('.under-tab [data-filter]'),//小カテゴリーフィルター 5 $underList = $('.under-list [data-category]');//大カテゴリー値 6 7//大カテゴリーフィルタリング機能 8 $tab.on('click', function(e) { 9 e.preventDefault(); 10 11 var $btnTxt = $(this).attr('data-filter'); 12 13 if ($btnTxt == 'all'){ 14 $list.fadeOut().promise().done(function() { 15 $list.addClass('animate').fadeIn(); 16 });//allの時にはとかく全てをfadeInする 17 } else { 18 $list.fadeOut().promise().done(function() { 19 $list.filter('[data-category~= "' + $btnTxt + '"]').addClass('animate').fadeIn(); 20 });//allじゃない時にはfilterをかけてdata-categoryの値が一致したもののみをfadeInする 21 } 22 }); 23 24//小カテゴリーフィルリング機能 25 $underTab.on('click', function(e) { 26 e.preventDefault(); 27 28 var $btnTxt = $(this).attr('data-filter'); 29 30 if ($btnTxt == 'all'){ 31 $underList.fadeOut().promise().done(function() { 32 $underList.addClass('animate').fadeIn(); 33 }); 34 } else { 35 $underList.fadeOut().promise().done(function() { 36 $underList.filter('[data-category~= "' + $btnTxt + '"]').addClass('animate').fadeIn(); 37 }); 38 } 39 }); 40 41}); 42</script> 43 44<script>//選択中タブの可視化用 45$(function(){ 46 var tabOn = $('.tab a'); 47 tabOn.click(function(){ 48 tabOn.removeClass('tab_active'); 49 $(this).addClass('tab_active'); 50 }); 51}); 52</script>
###課題1
大カテゴリー「All」を選択時には全ての値が表示されるのですが、この時には「Aカテゴリー」と「Bカテゴリー」のフィルタータブは非表示にしたい。
(All用に作成したフィルタータブのみ表示したい。)
###課題2
All用のフィルタータブをクリックした場合、「A小カテゴリー」と「B小カテゴリー」それぞれの値を表示したい。
※data-filterで、複数の値を適用したい。
【All用フィルターの値】
・小カテゴリーA、Bそれぞれの1
・小カテゴリーA、Bそれぞれの2
・小カテゴリーA、Bそれぞれの3
・小カテゴリーA、Bそれぞれの4
以上
何卒お力添えいただけますと幸いでございます。
よろしくお願い致します。