前提・実現したいこと
JavaScriptを勉強中で、
チェックボックスと文字入力によるtableの絞り込みを実現したいと思っています。
サイトに掲載されていたコードを使用させていただき書き換えていますが
次のことを実現するためにどのように書き換えたらよいかわからないため、
ご指示をいただけないでしょうか。
- 初期状態はチェックボックスにチェックが入っていない状態でリストをすべて表示
- チェックやキーワードを入れると該当のリストのみ絞り込み表示
- 絞り込みで、チェック項目「間取り」「築年数」「階」で選択されている項目がなくても、その他のチェック項目にチェックがある場合や文字入力がある場合は該当するリストを表示する
発生している問題・エラーメッセージ
- チェックボックスにチェックを入れるとすべて非表示になる、チェックを外してもすべて表示されず全て非表示状態
該当のソースコード
<!DOCTYPE html> <html lang="ja"> <style> table th,td,tr{ border: 1px solid gray; width: 100px; } </style> <body> <h1 style="padding-left: 10px;">物件検索</h1> <div class="search-box"> <span class="search-box_label">間取り:</span> <li><label><input type="checkbox" class="checkbox-input1" name="kubn" value="1LDK">1LDK</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="kubn" value="2LDK">2LDK</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="kubn" value="3LDK">3LDK</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="kubn" value="4LDK">4LDK</label></li> </div> <div class="search-box"> <span class="search-box_label">築年数:</span> <li><label><input type="checkbox" class="checkbox-input1" name="level" value="3年未満">3年未満</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="level" value="5年未満">5年未満</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="level" value="10年未満">10年未満</label></li> </div> <div class="search-box"> <span class="search-box_label">階:</span> <li><label><input type="checkbox" class="checkbox-input1" name="kai" value="1階">1階</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="kai" value="2階">2階</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="kai" value="3階">3階</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="kai" value="4階">4階</label></li> <li><label><input type="checkbox" class="checkbox-input1" name="kai" value="5階">5階</label></li> </div> <input type="text" class="tac inCenter" id="search-text" placeholder="文字を入力"> <!--★ チェックボックス 表示--> <!--★ CSVデータtable 表示--></table> <script src="js/jquery-3.6.0.min.js"></script> <script> $(function() { $("input").on("input change", function() { var kubn = $("[name=kubn]:checked").map(function() { return $(this).val(); }).get(); console.log(kubn); var level = $("[name=level]:checked").map(function() { return $(this).val(); }).get(); console.log(level); var kai = $("[name=kai]:checked").map(function() { return $(this).val(); }).get(); console.log(kai); var name = $("#search-text").val(); console.log(name); $("#abcd tbody tr").each(function() { var reg=new RegExp(name); if ($.inArray($(this).find("td.All_kubn").text(),kubn) >= 0 && $.inArray( $(this).find("td.All_level").text(),level) >= 0 && $.inArray( $(this).find("td.All_kai").text(),kai) >= 0 && (name=="" || //文字入力がnull または 各 reg.test($(this).find("td.All_kubn").text()) || reg.test($(this).find("td.All_lever").text()) || reg.test($(this).find("td.All_houi").text()) || reg.test($(this).find("td.All_kai").text()) || reg.test($(this).find("td.All_toho").text()) || reg.test($(this).find("td.All_yacin").text()) || reg.test($(this).find("td.All_sonota").text()) ) ){ $(this).show(); } else { $(this).hide(); } }); }); $(":checkbox").prop("checked", false); }); </script> </body> </html><table id="abcd" class="target-area" style="border-collapse: collapse"> <thead> <tr class="emp_index"> <th class="sort" data-sort="All_kubun">間取り</th> <th class="sort" data-sort="All_houi">方角</th> <th class="sort" data-sort="All_kai">階</th> <th class="sort" data-sort="All_toho">徒歩</th> <th class="sort" data-sort="All_level">築年数</th> <th class="sort" data-sort="All_yacin">家賃</th> <th class="sort" data-sort="All_sonota">その他</th> </tr> </thead> <tbody class="list"> <tr class=""> <td class="All_kubn">1LDK</td> <td class="All_houi">南東</td> <td class="All_kai">4F</td> <td class="All_toho">3分</td> <td class="All_level">3年未満</td> <td class="All_yacin"> 6万</td> <td class="All_sonota">バストイレ別</td> </tr> <tr class=""> <td class="All_kubn">2LDK</td> <td class="All_houi">東</td> <td class="All_kai">3F</td> <td class="All_toho">20分</td> <td class="All_level">5年未満</td> <td class="All_yacin">10万</td> <td class="All_sonota">システムキッチン/バストイレ別</td> </tr> <tr class=""> <td class="All_kubn">4LDK</td> <td class="All_houi">北</td> <td class="All_kai">1F</td> <td class="All_toho">1分</td> <td class="All_level">3年未満</td> <td class="All_yacin">5万</td> <td class="All_sonota">床暖房</td> </tr> <tr class=""> <td class="All_kubn">6LDK</td> <td class="All_houi">東南</td> <td class="All_kai">5F</td> <td class="All_toho">5分</td> <td class="All_level">3年未満</td> <td class="All_yacin">15万</td> <td class="All_sonota">ペット可</td> </tr> </tbody>
### 試したこと 流用元のコードは初期状態がチェックボックスが入っている状態で、すべてのリストを表示する状態でした。 そこで、以下のようにコードを書き換えました。 元 $(":checkbox").prop("checked", true).eq(0).trigger('change'); 書き換え $(":checkbox").prop("checked", false); ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
間取・築年数・階の条件はand/or検索どちらですか?
(それぞれの項目内ではor検索だとして)
また普通はテーブルを絞り込むのではなくデータを
絞り込んでからテーブルを描画するものでは?
お返事をありがとうございます。
間取、築年数、階の条件はand検索dす。チェックがない項目がある場合はチェックが入っている項目で検索をして表示したいです。
テーブルについてのご指摘もありがとうございます。
知識不足で筋違いな事を言ってるかもしれないのですが、
要素を表示非表示にするのではなく、データを絞り込んで
該当データのみをテーブルに描画ができたらと思っています。
実際の物件データは膨大なためcsvで読み込み、tableの形で出力しています。
回答1件
あなたの回答
tips
プレビュー