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

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

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

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

JavaScript

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

Q&A

0回答

1027閲覧

チェックボックスにJavaScriptのフィルタ機能をつけたい(完全一致)

koota

総合スコア0

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

フィルタ

フィルタとは、特定の条件に合わせてデータへのアクセスをブロックするプログラムやルーチンを指します。

JavaScript

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

0グッド

0クリップ

投稿2021/09/18 07:17

編集2021/09/18 12:23

JSの勉強をはじめたばかりの者です。
知識不足で言葉に不足や誤りがあるかもしれませんが、何卒ご容赦いただけますと幸いです。

カテゴリー名のチェックボックスと、複数のカテゴリー分けしたコンテンツを用意し、
カテゴリー名に複数チェックをした際、チェック項目と完全一致するコンテンツのみをブラウザに表示させるフィルタ機能の実装を勉強しています。

現在下記のように記述をしており、複数チェックをした際、「1つでも一致したらコンテンツが表示される」仕組みなのですが、「チェック項目と完全一致したコンテンツのみを表示」させるためにはどのようにしたらよいでしょうか?ご教授いただけますと幸いです。

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <style> ul { list-style: none; padding-left: 0 !important; } [data-filter-view]:not([data-filter-view=""]) [data-filter-key] { display: none; } [data-filter-view][data-filter-view~="#動画"] [data-filter-key~="#動画"], [data-filter-view][data-filter-view~="#写真"] [data-filter-key~="#写真"], [data-filter-view][data-filter-view~="#イラスト"] [data-filter-key~="#イラスト"] { display: block; } </style> </head> <body> <div class="filter" id="js-filter"> <ul class="filter-cond"> <li> <label class="check"> <input type="checkbox" value="#動画"> #動画</label> </li> <li> <label class="check"> <input type="checkbox" value="#写真"> #写真</label> </li> <li> <label class="check"> <input type="checkbox" value="#イラスト"> #イラスト</label> </li> </ul> <div class="gallery filter-items"> <!--sample-box--> <div class="sample-box" data-filter-key="#動画 #写真"> <div class="sample-img"> <img src="img/img01.jpg" alt=""> </div> <h3 class="sample-ttl">タイトル</h3> <dl class="sample-detail"> <dt>項目</dt> <dd>説明文テキスト文テキスト文テキスト文テキスト文テキスト</dd> <dt>カテゴリー</dt> <dd>#動画 #写真</dd> </dl> </div> <!--sample-box--> <div class="sample-box" data-filter-key="#動画 #写真 #イラスト"> <div class="sample-img"> <img src="img/img01.jpg" alt=""> </div> <h3 class="sample-ttl">タイトル</h3> <dl class="sample-detail"> <dt>項目</dt> <dd>説明文テキスト文テキスト文テキスト文テキスト文テキスト</dd> <dt>カテゴリー</dt> <dd>#動画 #写真 #イラスト</dd> </dl> </div> <!--sample-box--> <div class="sample-box" data-filter-key="#写真"> <div class="sample-img"> <img src="img/img01.jpg" alt=""> </div> <h3 class="sample-ttl">タイトル</h3> <dl class="sample-detail"> <dt>項目</dt> <dd>説明文テキスト文テキスト文テキスト文テキスト文テキスト</dd> <dt>カテゴリー</dt> <dd>#写真</dd> </dl> </div> <!--sample-box--> <div class="sample-box" data-filter-key="#写真 #イラスト"> <div class="sample-img"> <img src="img/img01.jpg" alt=""> </div> <h3 class="sample-ttl">タイトル</h3> <dl class="sample-detail"> <dt>項目</dt> <dd>説明文テキスト文テキスト文テキスト文テキスト文テキスト</dd> <dt>カテゴリー</dt> <dd>#写真 #イラスト</dd> </dl> </div> <!--sample-box--> <div class="sample-box" data-filter-key="#イラスト"> <div class="sample-img"> <img src="img/img01.jpg" alt=""> </div> <h3 class="sample-ttl">タイトル</h3> <dl class="sample-detail"> <dt>項目</dt> <dd>説明文テキスト文テキスト文テキスト文テキスト文テキスト</dd> <dt>カテゴリー</dt> <dd>#イラスト</dd> </dl> </div> </div> </div> <!--/#js-filter--> <script> var widget = document.getElementById('js-filter'); var checkboxes = widget.querySelectorAll('.filter-cond input[type="checkbox"]'); var checkedList = []; var filter = function () { checkedList = []; Array.prototype.forEach.call(checkboxes, function (input) { if (input.checked) { checkedList.push(input.value); } }); widget.setAttribute('data-filter-view', checkedList.join(' ')); }; Array.prototype.forEach.call(checkboxes, function (checkbox) { checkbox.addEventListener('change', filter); }); </script> </body> </html>

▼参考にさせていただいたサイト
https://www.mitsue.co.jp/knowledge/blog/frontend/201709/13_1426.html

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問