前提・実現したいこと
JSONファイルを読み込み、ラジオボタンにてカテゴリと年度の選択肢があり、
選択された両方の条件(AND検索)を満たすものだけjqueryにて表示させたいのですが、正しく表示ができません。
カテゴリと年度にて選択された条件をいずれも満たす場合での解決策を、ご教授頂きたくお願いいたします。
jsfiddleに現状のコードをアップいたしました。
https://jsfiddle.net/m_a_u_v_e/guLekpot/5/
該当のソースコード
JSON
1[ 2 { "category": "[cafe,2021]", "caption": "カフェ 2021" }, 3 { "category": "[autum,2021]", "caption": "秋 2021" }, 4 { "category": "[tokyo,2021]", "caption": "東京 2021" }, 5 { "category": "[autum,2020]", "caption": "秋 2020" }, 6 { "category": "[tokyo,2020]", "caption": "東京 2020" }, 7 { "category": "[cafe,2020]", "caption": "カフェ 2020" } 8] 9
jquery
1$(function(){ 2 3 var $imageWrap = $("#imageWrap"); 4 var alldata = []; //ここはすべてのデータを保持しておく配列 5 var filterdata = []; //フィルターを掛けたデータを保持する配列 6 7 $.ajax({ 8 // 読み込みの設定 9 type: "POST", 10 url: "data.json", // ファイルパス(相対パス) 11 dataType: "json", // ファイル形式 12 success: init, 13 }); 14 15 function init(data){ 16 alldata = data; 17 //最初に読み込んだときは全部標示する 18 filterdata=alldata; 19 //表示させる 20 display(); 21 } 22 23 //画像表示 24 function display(){ 25 $imageWrap.empty(); 26 for(var i=0; i < filterdata.length; i++){ 27 $('<li><p>'+filterdata[i].caption+'</p></li>').appendTo($imageWrap); 28 } 29 } 30 31 //ラジオボタンが変わった時にフィルタリングする 32 $('input:radio').change(function(){ 33 34 //チェックボタンの状況によってフィルタリングする 35 var cate=$(this).val(); 36 37 //フィルターの配列をいったん空っぽにする 38 filterdata=[]; 39 40 if(cate==="all"){//allが選択されたら全データを保持 41 filterdata=alldata; 42 43 }else{ 44 45 filterdata = $.grep(alldata,function(n, idx){ 46 return n.category.includes(cate); 47 } 48 ); 49 50 } 51 52 display(); 53 54 }); 55 56}); 57
HTML
1<form> 2 <p>カテゴリ</p> 3 <div class="form01"> 4 <span> 5 <input type="radio" name="list" value="all" checked> 6 <label>All</label> 7 </span> 8 <span> 9 <input type="radio" name="list" value="cafe"> 10 <label>cafe</label> 11 </span> 12 <span> 13 <input type="radio" name="list" value="tokyo"> 14 <label>tokyo</label> 15 </span> 16 <span> 17 <input type="radio" name="list" value="autum"> 18 <label>autum</label> 19 </span> 20 </div> 21</form> 22<form> 23 <div class="form2"> 24 <p>年度</p> 25 <span> 26 <input type="radio" name="list" value="2021"> 27 <label>2021</label> 28 </span> 29 <span> 30 <input type="radio" name="list" value="2020"> 31 <label>2020</label> 32 </span> 33 </div> 34</form>
何卒よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー