初投稿ですので、なれない点も多いですがご了承ください。
前提・実現したいこと
商品が一覧されている状態から、
[赤][黄色][緑]のボタンを押した時、対応する商品を表示したい。
各商品には複数の色を持っている場合がある。
該当のソースコード
<style> .buttonWrap button { display: inline-block; padding: 3px; cursor: pointer; } .buttonWrap button.is-active { color: white; background-color: black; } .is-hide { display: none; } </style> <div class="buttonWrap"> <button data-group="red">赤</button> <button data-group="yellow">黄色</button> <button data-group="green">緑</button> </div> <ul class="list"> <li class="line" data-group='{"red","green"}'>商品1</li> <li class="line" data-group="red">商品2</li> <li class="line" data-group="yellow">商品3</li> <li class="line" data-group='{"red","green"}'>商品4</li> <li class="line" data-group="green">商品5</li> </ul> <script> var searchItem = ".buttonWrap button"; var listItem = ".line"; var hideClass = "is-hide"; var activeClass = "is-active"; var groupAry = $(".line").attr("data-group"); //data-groupを配列取得 $(function () { // 絞り込みを変更した時 $(searchItem).on("click", function () { $(searchItem).removeClass(activeClass); var group = $(this).addClass(activeClass).data("group"); search_filter(group); }); }); function search_filter(group) { // 非表示状態を解除 $(listItem).removeClass(hideClass); // 値が空の場合はすべて表示 if (group === "") { return; } // リスト内の各アイテムをチェック for (var i = 0; i < $(listItem).length; i++) { // アイテムに設定している項目を取得 var itemData = $(listItem).eq(i).data("group"); // 絞り込み対象かどうかを調べる if (itemData !== group) { $(listItem).eq(i).addClass(hideClass); } } } </script>
試したこと
参考1のサイトを見て単一の色を持つ場合は実装することができました。
しかし、複数のデータを保持させた場合うまく実装できませんでした。
そのため、参考2を見て複数のデータを保有できるような形で記載しました。
var groupAry = $(".line").attr("data-group"); //data-groupを配列取得
このような形で取得、 itemDataの代わりに入れてみたのですが、うまくいきませんでした。
うまくdata-groupが取得できていないことが原因かなと思っているのですが、解決策やヒントなどを教えていただけると助かります。
よろしくお願いいたします。
補足情報
HTML CSS jQuery3.4.1 記述しています。
参考にしたサイト
参考1・・・選択した項目で絞り込み検索をする
https://www.tam-tam.co.jp/tipsnote/javascript/post14636.html
参考2・・・HTMLのデータ属性の配列として格納する
https://qiita.com/yamikoo@github/items/e70b979af9b60876b785
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/25 05:05
2020/11/25 05:11