LESSON / WP LOAD

DOM操作とイベント処理を学ぶ

JavaScriptからHTML要素を取得し、クリックに応じてクラスや文章を変更する方法を学びます。

目安 60分 コース進捗 0 / 17

GOAL

このレッスンでできるようになること

  • DOMからHTML要素を取得できる
  • addEventListenerでクリックを受け取れる
  • classListで表示状態を変更できる

ブラウザはHTMLを読み取ると、JavaScriptから操作できる文書の構造を作ります。この構造をDOM(Document Object Model)と呼びます。

このレッスンでは、ボタンを押すと説明文の表示状態が変わる処理を作ります。HTML、CSS、JavaScriptの役割を混ぜずに実装します。

操作するHTMLを用意する

JavaScriptから識別できるようにボタンと対象要素へクラスを付けます。ボタンには初期状態を表すaria-expandedと、操作対象を示すaria-controlsを指定します。

次の画像は、「操作するHTMLを用意する」で扱うコードや構成をブラウザで表示した結果です。

「操作するHTMLを用意する」で扱うコードや構成の表示結果
「操作するHTMLを用意する」で扱うコードや構成をブラウザで表示した結果
<button
 class="details-button"
 type="button"
 aria-expanded="false"
 aria-controls="details"
>
 詳細を見る
</button>

<div class="details" id="details" hidden>
 <p>Web制作の学習内容を紹介します。</p>
</div>

DOMから要素を取得する

document.querySelector()へCSSと同じ形式のセレクターを渡し、最初に一致する要素を取得します。要素が存在しない場合はnullになるため、処理を始める前に確認します。

次の図では、「DOMから要素を取得する」の仕組みや関係を確認できます。

「DOMから要素を取得する」の仕組みや関係を示す図
「DOMから要素を取得する」の仕組みと関係
const button = document.querySelector(".details-button");
const details = document.querySelector(".details");

if (button && details) {
 // 要素がある場合だけイベントを登録する
}

クリックイベントを受け取る

クリック前は詳細を隠し、利用者が必要なときに開ける状態にします。

詳細が閉じている初期状態のJavaScript開閉パネル
詳細が閉じている初期状態のJavaScript開閉パネル

ボタンを押すとCSSクラスが切り替わり、詳細内容が表示されます。

ボタンを押して詳細を表示したJavaScript開閉パネル
ボタンを押して詳細を表示したJavaScript開閉パネル

addEventListener()を使うと、クリックなどの出来事が起きたときに関数を実行できます。HTMLへonclickを直接書かず、処理をJavaScriptへまとめます。

const button = document.querySelector(".details-button");
const details = document.querySelector(".details");

if (button && details) {
 button.addEventListener("click", () => {
  const isOpen = button.getAttribute("aria-expanded") === "true";

  button.setAttribute("aria-expanded", String(!isOpen));
  details.hidden = isOpen;
 });
}

見た目の変更はCSSクラスへ任せる

複雑な見た目をJavaScriptから1つずつ変更せず、JavaScriptでは状態を表すクラスを付け外しし、具体的な装飾をCSSへ書きます。

次の図では、「見た目の変更はCSSクラスへ任せる」の仕組みや関係を確認できます。

「見た目の変更はCSSクラスへ任せる」の仕組みや関係を示す図
「見た目の変更はCSSクラスへ任せる」の仕組みと関係
.menu {
 display: none;
}

.menu.is-open {
 display: block;
}

状態を支援技術へ伝える必要がある操作では、クラスだけでなくaria-expandedなどの属性も同時に更新します。

操作を繰り返して確認する

  1. クリックして開く・閉じるを繰り返す
  2. TabキーとEnterキーでも操作する
  3. aria-expandedとhiddenが状態に合っているかElementsで確認する
  4. Consoleにエラーがないか確認する
  5. JavaScriptが読み込めない場合でも重要な内容を失わないか確認する

CHECK POINT

完了条件