無料サンプルレッスン:
JavaScript:一覧の絞り込み
カテゴリ選択を一覧表示へつなぐ無料レッスンです。全件・一致・0件・全件への復帰を実装し、結果の重複や件数のずれを初稿から修正して確認します。
1. ゴール:条件を変えても一覧と件数が一致する
配列と関数、イベント処理を学んだ人向けに、カテゴリ選択を画面の一覧へつなぎます。エディターとJavaScriptを実行できるブラウザーを用意します。架空の資料三件だけを使い、通信や保存は行いません。
これは編集部が作った課題とレビューのサンプルです。フォーム送信を扱う既存レッスンとは別に、選択を何度も変えたときの描画を練習します。
2. 課題:全件・一致・0件・復帰を作る
初期表示は三件です。地図は「紙の地図」「港の地図」の二件、写真は「町並みの写真」の一件、音声は0件にします。0件なら理由と戻り方を表示し、すべての資料へ戻すと三件を復元します。
提出物はHTMLと、選んだ種類・表示名・件数を並べた四行の記録です。選択欄をTabで選び、キーボードでも変更できることを確認してください。
3. 初稿:前の結果を残したまま追加する
const matches = items.filter(item => item.category === select.value);
for (const item of matches) {
const li = document.createElement("li");
li.textContent = item.name;
list.append(li);
}
if (matches) status.textContent = "資料があります";これはrender関数の中身の断片です。items、select、list、statusは修正版の宣言を使う前提で、単独では動きません。「すべて」の条件、前の結果の削除、0件の判定が欠けています。
4. レビュー例:元データと表示を分ける
- 条件を変えるたびに表示が増える原因は、前のliを残していることです。描画前にlist.replaceChildren()で一覧だけを空にします。
- 空の配列も条件式では真になるため、matches.length === 0で件数を調べます。0件のときの戻り方を案内します。
- 元のitemsを書き換えると全件へ戻せなくなります。filterで表示用の配列を作り、元の三件を残します。
参考:MDNのfilter、textContent(2026年10月27日確認)。表示名をHTMLとして解釈しないため、文字はtextContentへ入れます。
5. 修正版:初期表示も変更後も同じ関数を使う
次をfilter-practice.htmlとして保存して開きます。最初のrender()が初期表示を作り、以降はchangeイベントで同じ関数を呼びます。イベント登録は一度だけです。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>資料一覧の絞り込み練習</title>
<style>
body { margin: 1rem; font-family: sans-serif; line-height: 1.8; }
main { max-width: 42rem; margin-inline: auto; }
select { max-width: 100%; font: inherit; padding: .5rem; }
select:focus-visible { outline: 3px solid #174ea6; outline-offset: 3px; }
li { overflow-wrap: anywhere; }
</style>
</head>
<body>
<main>
<h1>資料一覧(架空の練習)</h1>
<label for="category">資料の種類</label>
<select id="category">
<option value="all">すべての資料</option>
<option value="map">地図</option>
<option value="photo">写真</option>
<option value="audio">音声</option>
</select>
<p id="status" role="status"></p>
<ul id="results"></ul>
<noscript><p>この練習の絞り込みにはJavaScriptが必要です。</p></noscript>
</main>
<script>
const items = [
{ name: '紙の地図', category: 'map' },
{ name: '町並みの写真', category: 'photo' },
{ name: '港の地図', category: 'map' }
];
const select = document.querySelector('#category');
const list = document.querySelector('#results');
const status = document.querySelector('#status');
function render() {
const category = select.value;
const matches = items.filter(item => category === 'all' || item.category === category);
list.replaceChildren();
for (const item of matches) {
const li = document.createElement('li');
li.textContent = item.name;
list.append(li);
}
status.textContent = matches.length === 0
? '該当する資料はありません。すべての資料を選ぶと一覧へ戻れます。'
: `${matches.length}件の資料があります。`;
}
select.addEventListener('change', render);
render();
</script>
</body>
</html>
6. 合格基準と追加課題
- 初期表示は三件で、案内文も3件になる。
- 地図→写真→地図と変更しても、二件・一件・二件で重複しない。
- 音声は一覧が空になり、0件の案内と戻り方が出る。
- すべての資料へ戻すと、元の三件が元の順序で戻る。
- キーボードで選択を変えても、選択欄のフォーカスが失われない。
20分を目安に、nameが「広場の音声」、categoryがaudioの一件を元データへ追加します。解答では全件が四件、音声が一件になり、0件の案内は消えます。さらに音声を選んだまま別カテゴリのデータを増やしても、音声の結果は一件のままです。
通信へ拡張する場合は、読み込み中や取得失敗を0件と混同しない設計が必要です。今回は同期処理だけです。filterの条件判定とフォームUIのレッスンで前提を復習できます。
無料で読める、
15のサンプル。
実際の受講と同じように、課題 → レビュー → 修正 → 合格基準まで公開しています。
見た目ではなく「意味」でHTMLを書き、読み上げ・検索・保守に強いマークアップへ直します。
02CSSレスポンシブCSS固定幅で崩れるカードを、clamp・grid・container queryを使って小さい画面でも破綻しない設計へ直します。
03Direction / UX情報設計とワイヤーフレーム装飾を始める前に、ユーザーが知りたい順番と事業側の目的を整理してワイヤーに落とします。
04UI DesignUIデザインレビュー色や装飾より先に、優先順位・余白・タイポグラフィで読みやすい画面へ修正します。
05JavaScriptJavaScript:フォームUIクリックで動けば終わりではなく、入力状態・エラー・キーボード操作まで含めてフォームを作ります。
06Accessibilityアクセシビリティ:操作とコントラスト自動チェックだけに頼らず、キーボード・フォーカス・コントラストを実際に確認します。
07WordPress / CMSCMS:更新しやすい設計ページを作るだけでなく、運用担当者が壊さず更新できる情報構造と入力項目を設計します。
08SEOSEO:検索意図とページ設計キーワードを詰め込むのではなく、検索する人の疑問とページの役割を合わせます。
09QA / TestingQA:公開前テスト自分の端末で見えたからOKではなく、正常系・異常系・実機・速度をチェックリスト化します。
10Deploy / Operation公開・運用:リリース設計ファイルをアップして終わりではなく、公開前確認・切り戻し・監視までを一つのリリースとして設計します。
11Direction / Client Workヒアリングと要件定義「何を作りたいですか?」だけで終わらず、背景・課題・優先順位・制約を聞き、制作要件に変換します。
12HTML / AccessibilityHTML:行と列が伝わる表表の見出しを見た目だけで済ませず、caption・th・scopeで関係を示します。行の入れ替えと一セルの更新を通して、原稿との照合まで練習する無料レッスンです。
13CSS / PrintCSS:紙に残す案内の設計画面のメニューを印刷時だけ外し、集合場所や持ち物を紙へ残す無料レッスンです。初稿の適用範囲を直し、印刷プレビューと通常表示の両方で合格条件を確かめます。
14JavaScript / DOMJavaScript:一覧の絞り込みカテゴリ選択を一覧表示へつなぐ無料レッスンです。全件・一致・0件・全件への復帰を実装し、結果の重複や件数のずれを初稿から修正して確認します。
15Operation / Handover運用:更新を引き継ぐ手順書担当が替わっても更新できる手順書を作る無料レッスンです。架空の休館案内を使い、編集元・確認者・公開担当・停止条件・公開後確認を一枚へ整理します。