はじめに
テーブルで複数のサービスを提供する店舗などをリスト表示します。
ユーザーがサービスを選択すると、対応する店舗情報のみに絞り込んで表示される機能を提供します。
この記事では、この方法について説明します。
完成イメージ
選択を解除
| ショップ | 料金 | サービス |
|---|---|---|
| Aクリニック | 10,000円 | 1,2,3,4 |
| Bクリニック | 15,000円 | 1 |
| Cクリニック | 20,000円 | 1,2 |
| Dクリニック | 12,000円 | 3 |
| Eクリニック | 10,000円 | 4 |
実装手順
以下の手順で実装します。
- ラベルHTMLを追加
以下のコードを「カスタムHTML」ブロックに入力します。
最後の列から情報を取得し、絞り込みを行います。<div class="select-block"> <div class="select-block__wrap"> <div class="select-block__list"> <span class="select-block__check"> <input type="checkbox" name="type" value="1"><label>サービス1</label> </span> <span class="select-block__check"> <input type="checkbox" name="type" value="2"><label>サービス2</label> </span> <span class="select-block__check"> <input type="checkbox" name="type" value="3"><label>サービス3</label> </span> <span class="select-block__check"> <input type="checkbox" name="type" value="4"><label>サービス4</label> </span> </div> <div class="select-block__reset">選択を解除</div> </div> </div> <table class="select-table"> <tr> <th>ショップ</th> <th>料金</th> <th>サービス</th> </tr> <tr> <td>Aクリニック</td> <td>10,000円</td> <td>1,2,3,4</td> </tr> <tr> <td>Bクリニック</td> <td>15,000円</td> <td>1</td> </tr> <tr> <td>Cクリニック</td> <td>20,000円</td> <td>1,2</td> </tr> <tr> <td>Dクリニック</td> <td>12,000円</td> <td>3</td> </tr> <tr> <td>Eクリニック</td> <td>10,000円</td> <td>4</td> </tr> </table> - ラベルJavaScriptを追加
以下のコードをjavascript.jsに追加します。
jQuery(function ($) { // チェックされたサービス値を格納する配列 let dataType = []; const className = 'hidden'; /** * テーブルの表示状態を更新 * @return {void} */ function preview() { $('.select-table tr').has('td').each(function () { // 最後の列(サービス列)のテキストを取得し、カンマ区切りで配列化 const services = $(this).find('td').last().text(); const serviceArray = services.split(',').map(s => s.trim()); // チェックが1つもない場合はすべての行を表示 if (dataType.length === 0) { $(this).removeClass(className); } else { // 選択されたサービスのいずれかが含まれているかどうかを判定 const hasMatch = serviceArray.some(n => dataType.includes(n)); // 一致する場合は表示し、一致しない場合は非表示クラスを追加する if (hasMatch) { $(this).removeClass(className); } else { $(this).addClass(className); } } }); } // チェックボックスの状態が変更された場合 $('.select-block__check input').on('change', function () { const value = $(this).val(); // チェックされた場合は配列に追加し、チェックが外れた場合は配列から除外 if ($(this).is(':checked')) { dataType.push(value); } else { dataType = dataType.filter(n => n !== value); } // フィルタリング処理を実行 preview(); }); // 「リセット」ボタンがクリックの場合 $('.select-block__reset').on('click', function () { // 全チェックボックスの選択を解除 $('.select-block__check input').prop('checked', false); dataType = []; preview(); }); }); - ラベルCSSを追加
以下のコードをstyle.cssに追加します。
/* リセットボタン */ .select-block__reset { border: 1px solid #ccc; cursor: pointer; margin-bottom: 1em; padding: 5px; text-align: center; } /* チェックボックスのラベル */ .select-block__check label { padding-left: 5px; } /* チェックボックスのレイアウト */ .select-block__list { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 1em; } /* 非表示の行 */ .select-table tr.hidden { display: none; }
さいごに
今回紹介した方法を使えば、ユーザーは複数のサービスを提供する店舗情報を、選択したサービスに基づいて絞り込み表示できます。
この機能を活用することで、ユーザーが関心のある情報を効率的に見つけやすくなり、利便性を大きく向上させることができます。

