実現したいこと
data属性を複数指定し、指定された値のどれか一つでも該当すれば表示させる
発生している問題・分からないこと
チェックボックスによる絞り込み機能を実装しているのですが、data属性に値を複数指定すると表示されなくなり、どのようにしたら複数指定できるようになるのか分かりません。
data-category='["name", "name"]'
のような指定方法は試してみましたがダメでした。
該当のソースコード
jQuery
1var searchBox = '.search-box'; 2var searchItem = '.search-box input'; 3var listItem = '.product_item' 4var hideClass = 'is-hide'; 5 6$(function() { 7 $(document).on('change', searchBox + ' input', function() { 8 search_filter(); 9 }); 10}); 11 12function search_filter() { 13 $(listItem).removeClass(hideClass); 14 for (var i = 0; i < $(searchBox).length; i++) { 15 var name = $(searchBox).eq(i).find('input').attr('name'); 16 var searchData = get_selected_input_items(name); 17 if(searchData.length === 0 || searchData[0] === '') { 18 continue; 19 } 20 for (var j = 0; j < $(listItem).length; j++) { 21 var itemData = get_setting_values_in_item($(listItem).eq(j), name); 22 var check = array_match_check(itemData, searchData); 23 if(!check) { 24 $(listItem).eq(j).addClass(hideClass); 25 } 26 } 27 } 28} 29 30function get_selected_input_items(name) { 31 var searchData = []; 32 $('[name=' + name + ']:checked').each(function() { 33 searchData.push($(this).val()); 34 }); 35 return searchData; 36} 37 38function get_setting_values_in_item(target, data) { 39 var itemData = target.data(data); 40 if(!Array.isArray(itemData)) { 41 itemData = [itemData]; 42 } 43 return itemData; 44} 45 46function array_match_check(arr1, arr2) { 47 var arrCheck = false; 48 for (var i = 0; i < arr1.length; i++) { 49 if(arr2.indexOf(arr1[i]) >= 0) { 50 arrCheck = true; 51 break; 52 } 53 } 54 return arrCheck; 55} 56
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
解決できませんでした。
補足
特になし

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/01/31 06:28
2025/01/31 06:44
2025/01/31 06:47
2025/01/31 06:49