CHAPTER 3 · 3 lessons · 3問

複数要素とイベント委譲

要素をまとめて取り、親に1つだけリスナーを付けて効率よく捌く。

0 / 3 問クリア

ここまでは、要素を1つずつ getElementById で取って、1つずつ addEventListener を付けてきた。5行のアプリならそれでいい。でも行が50になったら?100になったら?

この章では2つの新しい道具を手に入れるよ。

ひとつめは querySelectorAll。CSS のセレクタで条件を書いて、合うものを全部まとめて取るメソッドだ。getElementById は名前で1つだけ指名する道具、querySelectorAll は条件で何個でも取れる道具。この章では、既知の ID で1つ取る場合と、条件で複数取る場合を使い分ける。

ふたつめはイベント委譲(event delegation)。行が何個あっても、リスナーは親に1つだけ。押されると、そのイベントは子から親へと伝わっていく。親で受け取って event.target を見れば「誰が押されたか」が分かる。closest で探せば「その行はどれか」も分かる。

最後に、この2つを組み合わせて一括操作をやってみよう。完了マークの付いた行をまとめて消す。セレクタで絞って、ループで全部に何かする——DOM を扱うときのいちばん汎用的な形だよ。

この章のレッスン

まとめて取る

  1. 09querySelectorAll で複数を一度に取るgetElementById は1つだけ。querySelectorAll なら、条件に合うもの全部をまとめて取れるよ。問題へ

委譲する

  1. 101つのリスナーで全行を捌く行ごとにリスナーを付けるかわりに、親に1つだけ付けて event.target で仕分ける。問題へ

まとめて操作する

  1. 11おわったものをまとめて消すquerySelectorAll で完了マーク付きの行を集めて、for...of で全部消そう。問題へ

これがこのコースの最後の章。