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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

Q&A

解決済

1回答

5493閲覧

ドロップダウンリストでデータを絞り込んだものに、ページャーをつけたい

mariko76

総合スコア22

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2020/07/10 08:47

店舗リストを掲載したいのですが、店舗数が多いのでエリアごとにプルダウンで絞り込みをしたいと思っています。
さらに、絞り込んだリストにページャーもつけたいとクライアントから言われています。

テストページで実験をしているのですが、プルダウンで絞り込み+件数表示はできたものの、ページャーだけが絞り込む前の全件を対象としてしまって困っています。

こちらが実装したページです。
http://trip-paris.jp/test/

jquery、javascript初心者です。
よろしくお願いします。

実現したいこと

・プルダウンリストで店舗のエリアを絞る
・絞った後の件数を表示させる
・店舗数が多い場合はページャーを表示する(現在実験なので1ページ3件までに設定しています)

現象

ページャーの対象項目が全体を対象としてしまって、一項目目の「東京都」を常に1ページ目と認識している。
その為、東京以外の県を選択しても店舗が表示されない。

jquery

// プルダウン 絞り込み $(".js-filter-form").on("change", function(){ var selected = []; $(".js-filter-form :selected").each(function(){ selected.push($(this).val()); // push()は配列に値を追加します }); console.log(selected); var count = 0; $(".js-filter-items li").each(function(){ var cat = $(this).data("cat"); var is_exist = $.inArray( cat, selected ); // inArray()は配列内に値があるかどうかを調べます if (is_exist != -1) { $(this).removeClass("hidden"); count++; } else { $(this).addClass("hidden"); } }); if (count) { var str = "<span>全" + count + "件</span>"; } else { var str = "該当するアイテムはありません"; } $(".js-filter-status").html(str); }); // ページャー $('.js-filter-items').pagination({ itemElement : '> li', displayItemCount: 3, prevNextPageBtnMode: true, onePageOnlyDisplay: false, paginationClassName: 'pager', paginationInnerClassName: 'pager_inner', pageNumberClassName: 'pager_num' });

pagenation.jsというプラグインを使用しています。
https://shanabrian.com/web/jquery/pagination.php

HTML

<section> <select name="type" class="js-filter-form list_checkbox"> <option value="">都道府県を選択してください</option> <option value="tokyo">東京都</option> <option value="kanagawa">神奈川県</option> <option value="saitama">埼玉県</option> <option value="chiba">千葉県</option> </select> <p class="js-filter-status text_status">全<span>件</span></p> <ul class="js-filter-items flex-wrap"> <li data-cat="tokyo">東京都 店舗01</li> <li data-cat="tokyo">東京都 店舗02</li> <li data-cat="tokyo">東京都 店舗03</li> <li data-cat="tokyo">東京都 店舗04</li> <li data-cat="tokyo">東京都 店舗05</li> <li data-cat="tokyo">東京都 店舗06</li> <li data-cat="kanagawa">神奈川県 店舗01</li> <li data-cat="kanagawa">神奈川県 店舗02</li> <li data-cat="kanagawa">神奈川県 店舗03</li> <li data-cat="kanagawa">神奈川県 店舗04</li> <li data-cat="kanagawa">神奈川県 店舗05</li> <li data-cat="saitama">埼玉県 店舗01</li> <li data-cat="saitama">埼玉県 店舗02</li> <li data-cat="saitama">埼玉県 店舗03</li> <li data-cat="saitama">埼玉県 店舗03</li> <li data-cat="chiba">千葉県 店舗01</li> <li data-cat="chiba">千葉県 店舗02</li> <li data-cat="chiba">千葉県 店舗03</li> <li data-cat="chiba">千葉県 店舗04</li> </ul> </section>

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

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

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

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

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

guest

回答1

0

ベストアンサー

絞り込み時に表示したくないli要素にhiddenクラスを設定しているかと思います。
これをpagination初期化時のitemElementパラメータに織り込めば表示を絞り込めます。配下のli要素のうち.hiddenでないものを対象とするセレクタは>li:not(.hidden)です。

絞り込んだ後にpaginationをもう一度実行すればよいのですが、すでに作成されているページャーがずっと残るので削除しておきましょう。

javascript

1 $('.pager').remove(); // 既に存在するページャーの削除 2 $('.js-filter-items').pagination({ 3 itemElement : '>li:not(.hidden)', // 配下のli要素のうち.hiddenでないものを対象とする 4

また、このままでは表示が崩れます。paginationがliタグに設定しているdisplayスタイルが一覧の表示に悪影響を及ぼします。(nonelist-itemをpaginationがつけている)
絞り込み時にcssのdisplay要素を削除しておきましょう。

javascript

1 $(".js-filter-items li").each(function(){ 2 (略) 3 $(this).css("display",""); // paginationがつけたdisplay要素を削除する 4 });

投稿2020/07/10 11:55

hope_mucci

総合スコア4447

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

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

mariko76

2020/07/10 15:05

ご丁寧な解答ありがとうございます! jsに入れ込んでみたのですが、入れた場所が間違っているのか、うまくいかないのです…。 現在この状態なのですが、どこを修正したらいいでしょうか。お手数をおかけしてすみません。 http://trip-paris.jp/test/
hope_mucci

2020/07/10 15:36

- cssを削除する処理は、removeClass("hidden")した要素だけではなく、すべての要素に行ってください。paginationのナンバリングが誤作動します。 - paginationを作り直している処理がありません。セレクトボックスをon(change)している処理の最後のほうにもう一回pagination作成処理を追加してください。
mariko76

2020/07/12 07:16

無事に理想の動作にできました! ご教示ありがとうございました、助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問