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

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

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

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

jQuery

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

Q&A

1回答

818閲覧

jquery フィルタリング絞り込みともっと見るボタンを併用

ysfree14

総合スコア19

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/06/17 04:39

jqueryで絞り込み機能ともっと見るボタンを併用で設置したいと考えています。

絞り込みの種類⇒全て・新作・再販・予約
もっと見るをクリックで4件ずつ表示

全ての時は4つずつ表示がうまく動作するのですが、
新作・再販・予約をクリックしたときに最初の4件まで表示させることはできるのですが、
もっと見るをクリックで一気に他の分類のものまで全て表示されてしまいます。

またboxesの中身はjsonで取得させる予定です。

解決策はありますか?

html

1<div class="cta filter"> 2 <a class="tab-name all active" data-filter="all" href="#" role="button">すべて</a> 3 <a class="tab-name new-tab" data-filter="new-tab" href="#" role="button">新作</a> 4 <a class="tab-name re-tab" data-filter="re-tab" href="#" role="button">再販</a> 5 <a class="tab-name booking-tab" data-filter="booking-tab" href="#" role="button">予告と予約</a> 6</div> 7 8<div class="boxes"> 9 10<!--新作商品--> 11<div class="col1 new-tab tab-elm" data-category="new-tab"> 12<a href="" target="_top" class="block"> 13<div class="product-img img-col1"> 14<img src="" alt=""> 15</div> 16<div class="label-wrap"> 17<p class="img-label new-label">新作</p> 18</div> 19<p class="price-text"><span>税込</span></p> 20</a> 21</div> 22<!--新作商品--> 23 24<!--再販商品--> 25<div class="col1 re-tab tab-elm" data-category="re-tab"> 26<a href="" target="_top" class="block"> 27<div class="product-img img-col1"> 28<img src="" alt=""> 29</div> 30<div class="label-wrap"> 31<p class="img-label re-label">再販</p> 32</div> 33<p class="price-text"><span>税込</span></p> 34</a> 35</div> 36<!--再販商品--> 37 38<!--予約商品--> 39<div class="col1 booking-tab tab-elm" data-category="booking-tab"> 40<a class="block" href=""> 41<div class="product-img img-col1"> 42<img src="" alt=""> 43</div> 44<div class="label-wrap"> 45<p class="img-label booking-label">予約</p> 46</div> 47<p class="price-text"><span>税込</span></p> 48</a> 49</div> 50<!--予約商品--> 51 52</div>

jquery

1$(document).ready(function(){ 2 3 var $filters = $('.filter [data-filter]'), 4 $boxes = $('.boxes [data-category]'); 5 6 $filters.on('click', function(e) { 7 e.preventDefault(); 8 var $this = $(this); 9 $filters.removeClass('active'); 10 $this.addClass('active'); 11 12 var $filterColor = $this.attr('data-filter'); 13 14 if ($filterColor == 'all') { 15 16 //全てをクリックされたときの処理 17 $('.tab-more-btn').remove(); 18 $boxes.removeClass('is-animated') 19 .fadeOut().promise().done(function() { 20 $('.boxes [data-category]:lt(4)').addClass('is-animated').fadeIn(); 21 $('.tab-more-btn:lt(4)').hide(); 22 $('.tab-elm:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); 23 $(document).on('click','.tab-more-btn',function(){ 24 $('.tab-elm:visible:lt(4)').addClass('is-animated').fadeIn(); 25 $('.tab-elm:visible').closest('.boxes').last().after($('.tab-more-btn')); 26 if($('.tab-elm:hidden').length==0) $('.tab-more-btn').remove(); 27 }); 28 29 }); 30 31 } else { 32 33 //全て以外をクリックしたときの処理 34 $('.tab-more-btn').remove(); 35 $('.tab-elm:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); 36 $boxes.removeClass('is-animated') 37 .fadeOut().promise().done(function() { 38 $boxes.filter('[data-category = "' + $filterColor + '"]:lt(4)').addClass('is-animated').fadeIn(); 39 }); 40 41 $(document).on('click','.tab-more-btn',function(){ 42 $boxes.filter('[data-category = "' + $filterColor + '"]:lt(4)').addClass('is-animated').fadeIn(); 43 $('.tab-elm:visible').closest('.boxes').last().after($('.tab-more-btn')); 44 if($('.tab-elm:hidden').length==0) $('.tab-more-btn').remove(); 45 }); 46 47 } 48 49 }); 50 51 //初期の全て表示されている状態 52 $('.tab-elm:gt('+(4-1)+')').hide(); 53 $('.tab-elm:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); 54 $(document).on('click','.tab-more-btn',function(){ 55 $('.tab-elm:lt('+($('.tab-elm:visible').length+4)+')').show(); 56 $('.tab-elm:visible').closest('.boxes').last().after($('.tab-more-btn')); 57 if($('.tab-elm:hidden').length==0) $('.tab-more-btn').remove(); 58 }); 59 60 }); 61コード

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

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

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

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

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

m.ts10806

2019/06/17 04:45

サンプルデータをご提示ください。
guest

回答1

0

全て・新作・再販・予約の絞り込みをするならラジオボタンなど
データが保持できるものを利用してください

sample

javascript

1<script> 2$(function(){ 3 $(':radio[name=category]').on('change',function(){ 4 $('.boxes .tab-elm').hide().filter($(this).val()).show(); 5 }); 6}); 7</script> 8<div class="cta filter"> 9<label><input type="radio" name="category" value="*" checked>すべて</label> 10<label><input type="radio" name="category" value=".new-tab">新作</label> 11<label><input type="radio" name="category" value=".re-tab">再販</label> 12<label><input type="radio" name="category" value=".booking-tab">予告と予約</label> 13</div> 14 15<div class="boxes"> 16<div class="col1 tab-elm new-tab">new1</div> 17<div class="col1 tab-elm re-tab">re1</div> 18<div class="col1 tab-elm booking-tab">book1</div> 19</div>

投稿2019/06/17 04:45

編集2019/06/17 04:55
yambejp

総合スコア114878

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

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

ysfree14

2019/06/18 02:12 編集

ありがとうございます。 上記のソースを参考に少し考えてみたのですが、表示させる要素にクラス名「on」をつけて「もっと見る」ボタンで4件ずつ表示させようと思いました。 ・最初にすべての状態でもっと見るボタンを設置して4件ずつ表示 ・絞り込みで最初の4件まで表示 上記は実装できたのですが、絞り込みで4件まで表示して「もっと見る」を押したときにうまく4件ずつ取得できません。 ご回答いただけますと幸いです。よろしくお願い致します。 $(function(){ //全ての要素に.onをつける $('.tab-elm').addClass("on"); //.onを4件ずつ表示 $('.on:gt('+(4-1)+')').hide(); //もっと見るボタンを配置 $('.on:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); //もっと見るボタンの処理 $(document).on('click','.tab-more-btn',function(){ $('.tab-elm:lt('+($('.tab-elm:visible').length+4)+')').addClass("on").show(); $('.on:visible').closest('.boxes').last().after($('.tab-more-btn')); if($('.on:hidden').length==0) $('.tab-more-btn').remove(); }); //絞り込みをした要素に.onをつけて4件ずつ表示 $(':radio[name=category]').on('change',function(){ //一度もっと見るボタンを消す $('.tab-more-btn').remove(); //一度全てのtab-elmから.onを消す $('.tab-elm').removeClass("on"); //絞り込みした要素に.onをつける $('.boxes .tab-elm').hide().filter($(this).val()).addClass("on").show(); //.onを4件表示 $('.on:gt('+(4-1)+')').hide(); //4件表示の下に「もっと見る」ボタンを配置 $('.on:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); }); });
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問