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

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

新規登録して質問してみよう
ただいま回答率
85.33%
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

3回答

393閲覧

チェックボックスによる絞り込み検索を実装したい。

matsu766

総合スコア1

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グッド

1クリップ

投稿2025/02/06 00:26

編集2025/02/06 01:32
チェックボックスによる絞り込み検索を実装したい。また表示されるものに複数のカテゴリを持たせ、どれか一つでも該当した場合に表示させるような仕様にしたい。 ### 発生している問題・分からないこと ネットで調べて実装してみましたが、カテゴリを複数指定することができません。複数指定すると指定したカテゴリにチェックを入れても表示されなくなってしまいました。 ### 該当のソースコード ```jQuery jQuery(function ($) { $(".works_form_detail :checkbox").on("click", function () { var checked = []; $(".works_form_detail :checked").each(function () { checked.push($(this).val()); // pushは配列に値を追加します }); console.log(checked); $(".works_list_item").each(function () { var category = $(this).data("category"); console.log(category); // fun(worklist, category); var is_exist = $.inArray(category, checked); // inArray()は配列内に値があるかどうかを調べます if (is_exist != -1) { $(this).removeClass("hidden"); } else { $(this).addClass("hidden"); } }); }); });

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

一つのカテゴリのみ指定するような仕様では実装できたが、複数指定はできなかった。

補足

HTML

1<div class="works_search-box"> 2 <div class="works_contents l_container-lg"> 3 <form action="" class="works_form"> 4 <dl class="works_form_list"> 5 <dt class="works_form_heading"> 6 <span class="search-box_label">深絞り</span> 7 </dt> 8 <dd class="works_form_detail"> 9 <label><input type="checkbox" name="category[]" value="deep01" class="deep_checkbox works_form_checkbox">超深絞り</label> 10 <label><input type="checkbox" name="category[]" value="deep02" class="deep_checkbox works_form_checkbox">深絞り+α</label> 11 <label><input type="checkbox" name="category[]" value="deep03" class="deep_checkbox works_form_checkbox">難形状</label> 12 </dd> 13 <dt class="works_form_heading"></dt> 14 <dd class="works_form_detail"> 15 <label><input type="checkbox" name="category[]" value="change01" class="change_checkbox works_form_checkbox"><span class="search-box_label">工法転換</span></label> 16 <label>(コストダウン・軽量化・スピードアップ)</label> 17 </dd> 18 <dt class="works_form_heading"></dt> 19 <dd class="works_form_detail"> 20 <label><input type="checkbox" name="category[]" value="change02" class="change_checkbox works_form_checkbox"><span class="search-box_label">板鍛造</span></label> 21 </dd> 22 <dt class="works_form_heading"> 23 <span class="search-box_label">材質</span> 24 </dt> 25 <dd class="works_form_detail"> 26 <label><input type="checkbox" name="category[]" value="material01" class="material_checkbox works_form_checkbox">鉄</label> 27 <label><input type="checkbox" name="category[]" value="material02" class="material_checkbox works_form_checkbox">鍍金鋼板・ZAM</label> 28 <label><input type="checkbox" name="category[]" value="material03" class="material_checkbox works_form_checkbox">ステンレス</label> 29 <label><input type="checkbox" name="category[]" value="material04" class="material_checkbox works_form_checkbox">アルミ</label> 30 <label><input type="checkbox" name="category[]" value="material05" class="material_checkbox works_form_checkbox">銅・真鍮</label> 31 <label><input type="checkbox" name="category[]" value="material06" class="material_checkbox works_form_checkbox">ハイテン</label> 32 </dd> 33 </dl> 34 <div class="m_btn-wrapper works_form_btn-wrapper"> 35 <a href="" class="m_btn works_btn">すべて表示</a> 36 <!-- <label><input id="select-all" class="m_btn works_btn" type="reset" value="全解除" /></label> --> 37 </div> 38 </form> 39 </div> 40 </div> 41 <section class="works-list"> 42 <div class="works_contents l_container-lg"> 43 <div class="l_contents"> 44 <ul class="works_list_items"> 45 <li class="works_list_item" data-category="deep01"> 46 <div class="swiper-slide works_list_img-wrapper"> 47 <img 48 src="img/works-01.jpg" 49 width="6" 50 height="4" 51 alt="製品の写真" 52 class="works_list_img" 53 loading="lazy"> 54 </div> 55 <div class="works_desc_wrapper"> 56 <div class="works_desc"> 57 <p class="works_desc_text">車載用バッテリーケース</p> 58 </div> 59 <!-- <div class="works_desc"> 60 <p class="works_desc_text">業界</p> 61 <p class="works_desc_text">テキスト</p> 62 </div> 63 <div class="works_desc"> 64 <p class="works_desc_text">被加工素材</p> 65 <p class="works_desc_text">テキスト</p> 66 </div> 67 <div class="works_desc"> 68 <p class="worcs_desc_text">解説</p> 69 <p class="worcs_desc_text">テキスト</p> 70 </div> --> 71 </div> 72 </li> 73 </ul> 74 </div> 75 </div> 76 </section>

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

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

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

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

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

int32_t

2025/02/06 00:38

HTMLも開示してください。
yambejp

2025/02/06 00:49 編集

チェックボックスでHTMLの複数の要素から該当する部分を抽出するということですよね? まずはHTMLを提示し、どういう条件でどう絞り込みたいか提示されたほうがよいかと またチェックボックスはand検索ですか?or検索ですか?
matsu766

2025/02/06 01:33

追記させていただきました。 仕様はor検索での実装が希望です。
yambejp

2025/02/06 01:48

HTMLをみると深絞りと材質のカテゴリー間はand検索、それぞれのカテゴリー内はor検索にしたいような構成なのですが全部or検索でよいのでしょうか?
matsu766

2025/02/06 04:43

@yambejp 様 お察しの通り、カテゴリ間はand検索、カテゴリ内はor検索にしたいです。
matsu766

2025/02/06 04:45

@juner 様 こちらどのような挙動をされていますか? 確認させていただきましたが、うまく動いていないような気がして、、、
juner

2025/02/06 05:22

質問文のソースをそのまま使っているだけなので何が足りないかわからないというニュアンスです。
guest

回答3

0

「複数のカテゴリを持たせ」とのことですがdata-categoryを設定するとした場合値は文字列しか指定できません
複数のカテゴリをもたせる方法としては少し工夫が必要です、できればクラスなどの複数指定できるものにするほうがやりやすいでしょう。

参考

CSSでやるとこんな感じ?

html

1<style> 2.works_list_item{display:none;} 3fieldset:has([value="category-a"]:checked) ~ ul .category-a, 4fieldset:has([value="category-b"]:checked) ~ ul .category-b, 5fieldset:has([value="category-c"]:checked) ~ ul .category-c 6{display:list-item;} 7</style> 8<fieldset class="works_form_detail"> 9<legend>選択</legend> 10<label><input type="checkbox" value="category-a">a</label> 11<label><input type="checkbox" value="category-b">b</label> 12<label><input type="checkbox" value="category-c">c</label> 13</fieldset> 14<hr> 15<ul> 16<li class="works_list_item category-a">a</li> 17<li class="works_list_item category-b">b</li> 18<li class="works_list_item category-c">c</li> 19<li class="works_list_item category-a category-c">a c</li> 20<li class="works_list_item category-b category-c">b c</li> 21<li class="works_list_item category-a category-b category-c">a b c</li> 22</ul>

投稿2025/02/06 00:47

編集2025/02/06 01:02
yambejp

総合スコア117203

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

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

0

まず、「どうやって複数のカテゴリをdata-categoryに書くか」を質問者さんが決める必要があります。
その決定にしたがって、以下のコードを、

js

1 var category = $(this).data("category"); 2 var is_exist = $.inArray(category, checked); 3 if (is_exist != -1) {
  1. 複数のカテゴリを配列として取り出せるように変更する
  2. その配列の要素それぞれについて checkedに含まれるかどうか調べ、
  3. 一つでも含まれていたらhiddenクラスを消す、そうでないならhiddenクラスを足す

のように変更します。

投稿2025/02/06 03:30

int32_t

総合スコア21871

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

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

0

こんな感じにしてみました。
細かいところは変更が必要かもしれません。
また、素のjavascriptなのでjqueryに変換して書く必要があります。

html

1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <title>Document</title> 8 9 <style> 10 .hidden { 11 display: none; 12 } 13 </style> 14</head> 15 16<body> 17 <div class="works_search-box"> 18 <div class="works_contents l_container-lg"> 19 <form action="" class="works_form"> 20 <dl class="works_form_list"> 21 <dt class="works_form_heading"> 22 <span class="search-box_label">深絞り</span> 23 </dt> 24 <dd class="works_form_detail"> 25 <label><input type="checkbox" name="category[]" value="deep01" 26 class="deep_checkbox works_form_checkbox">超深絞り</label> 27 <label><input type="checkbox" name="category[]" value="deep02" 28 class="deep_checkbox works_form_checkbox">深絞り+α</label> 29 <label><input type="checkbox" name="category[]" value="deep03" 30 class="deep_checkbox works_form_checkbox">難形状</label> 31 </dd> 32 <dt class="works_form_heading"></dt> 33 <dd class="works_form_detail"> 34 <label><input type="checkbox" name="category[]" value="change01" 35 class="change_checkbox works_form_checkbox"><span 36 class="search-box_label">工法転換</span></label> 37 <label>(コストダウン・軽量化・スピードアップ)</label> 38 </dd> 39 <dt class="works_form_heading"></dt> 40 <dd class="works_form_detail"> 41 <label><input type="checkbox" name="category[]" value="change02" 42 class="change_checkbox works_form_checkbox"><span 43 class="search-box_label">板鍛造</span></label> 44 </dd> 45 <dt class="works_form_heading"> 46 <span class="search-box_label">材質</span> 47 </dt> 48 <dd class="works_form_detail"> 49 <label><input type="checkbox" name="category[]" value="material01" 50 class="material_checkbox works_form_checkbox"></label> 51 <label><input type="checkbox" name="category[]" value="material02" 52 class="material_checkbox works_form_checkbox">鍍金鋼板・ZAM</label> 53 <label><input type="checkbox" name="category[]" value="material03" 54 class="material_checkbox works_form_checkbox">ステンレス</label> 55 <label><input type="checkbox" name="category[]" value="material04" 56 class="material_checkbox works_form_checkbox">アルミ</label> 57 <label><input type="checkbox" name="category[]" value="material05" 58 class="material_checkbox works_form_checkbox">銅・真鍮</label> 59 <label><input type="checkbox" name="category[]" value="material06" 60 class="material_checkbox works_form_checkbox">ハイテン</label> 61 </dd> 62 </dl> 63 <div class="m_btn-wrapper works_form_btn-wrapper"> 64 <a href="" class="m_btn works_btn">すべて表示</a> 65 <!-- <label><input id="select-all" class="m_btn works_btn" type="reset" value="全解除" /></label> --> 66 </div> 67 </form> 68 </div> 69 </div> 70 <section class="works-list"> 71 <div class="works_contents l_container-lg"> 72 <div class="l_contents"> 73 <ul class="works_list_items"> 74 <li class="works_list_item" data-category="deep01"> 75 <div class="swiper-slide works_list_img-wrapper"> 76 <img src="img/works-01.jpg" width="6" height="4" alt="製品の写真" class="works_list_img" 77 loading="lazy"> 78 </div> 79 <div class="works_desc_wrapper"> 80 <div class="works_desc"> 81 <p class="works_desc_text">車載用バッテリーケース</p> 82 </div> 83 <!-- <div class="works_desc"> 84 <p class="works_desc_text">業界</p> 85 <p class="works_desc_text">テキスト</p> 86 </div> 87 <div class="works_desc"> 88 <p class="works_desc_text">被加工素材</p> 89 <p class="works_desc_text">テキスト</p> 90 </div> 91 <div class="works_desc"> 92 <p class="worcs_desc_text">解説</p> 93 <p class="worcs_desc_text">テキスト</p> 94 </div> --> 95 </div> 96 </li> 97 <li class="works_list_item" data-category="deep02 deep03"> 98 <div class="swiper-slide works_list_img-wrapper"> 99 <img src="img/works-01.jpg" width="6" height="4" alt="製品の写真" class="works_list_img" 100 loading="lazy"> 101 </div> 102 <div class="works_desc_wrapper"> 103 <div class="works_desc"> 104 <p class="works_desc_text">難形状 or 難形状</p> 105 </div> 106 <!-- <div class="works_desc"> 107 <p class="works_desc_text">業界</p> 108 <p class="works_desc_text">テキスト</p> 109 </div> 110 <div class="works_desc"> 111 <p class="works_desc_text">被加工素材</p> 112 <p class="works_desc_text">テキスト</p> 113 </div> 114 <div class="works_desc"> 115 <p class="worcs_desc_text">解説</p> 116 <p class="worcs_desc_text">テキスト</p> 117 </div> --> 118 </div> 119 </li> 120 </ul> 121 </div> 122 </div> 123 </section> 124 125 <script> 126 127 const categoryArray = Array.from(document.getElementsByName('category[]')) 128 categoryArray.forEach($category => { 129 $category.addEventListener('click', (ev) => { 130 131 const $works_list_items = Array.from(document.querySelectorAll('.works_list_item[data-category]')) 132 const activeCategories = new Set(Array.from(categoryArray).filter(category => category.checked).map(category => category.value)) 133 134 // すべてのチェックが外れていたら全検索とする 135 if (activeCategories.size <= 0) { 136 $works_list_items.forEach($works_list_item => { 137 $works_list_item.classList.remove('hidden') 138 }) 139 140 } else { 141 $works_list_items.forEach($works_list_item => { 142 143 const targetCategorys = new Set($works_list_item.dataset.category.split(' ')) 144 const hasCategory = Array.from(activeCategories).some(category => targetCategorys.has(category)) 145 146 if (hasCategory) { 147 $works_list_item.classList.remove('hidden') 148 } else { 149 $works_list_item.classList.add('hidden') 150 } 151 }) 152 } 153 154 }) 155 }) 156 157 158 159 </script> 160 161</body> 162 163</html>

投稿2025/02/06 03:29

utm.

総合スコア524

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問