querySelector と querySelectorAll の使い方

querySelectorquerySelectorAll は、CSS セレクタを使って要素を取得できる便利なメソッドです。id でもクラスでも属性でも、CSS で書けるセレクタならなんでも使えます。

querySelector の基本

querySelector は、マッチする最初の要素を1つだけ返します。

// id で取得
const header = document.querySelector('#header');

// クラスで取得
const item = document.querySelector('.item');

// タグで取得
const paragraph = document.querySelector('p');

// 属性で取得
const input = document.querySelector('input[type="text"]');

見つからなければ null が返ります。

querySelectorAll の基本

querySelectorAll は、マッチするすべての要素を NodeList として返します。

const items = document.querySelectorAll('.item');
console.log(items.length); // マッチした要素の数

items.forEach(item => {
  console.log(item.textContent);
});

querySelector と getElementById の違い

querySelector

CSS セレクタを使うので #id のようにシャープが必要。柔軟だがやや遅い

getElementById

id 名をそのまま渡す。シンプルで高速

id で取得するだけなら getElementById のほうが速いです。ただ、複雑なセレクタが必要なときは querySelector が便利です。

複雑なセレクタの例

CSS セレクタの知識がそのまま使えるのが強みです。

// 子孫セレクタ
const link = document.querySelector('nav a');

// 子セレクタ
const directChild = document.querySelector('ul > li');

// 複数条件
const active = document.querySelector('li.active');

// 擬似クラス
const firstItem = document.querySelector('li:first-child');
const lastItem = document.querySelector('li:last-child');

実際に動かしてみよう

querySelectorAll で複数の要素を取得し、順番に色を変えてみます。

HTML
CSS
JavaScript
<ul>
  <li class="fruit">りんご</li>
  <li class="fruit">みかん</li>
  <li class="fruit">ぶどう</li>
</ul>
<button id="btn">色を変える</button>
document.querySelector('#btn').addEventListener('click', function() {
  const fruits = document.querySelectorAll('.fruit');
  fruits.forEach((fruit, index) => {
    fruit.style.color = ['red', 'orange', 'purple'][index];
  });
});

querySelector / querySelectorAll は現代の JavaScript では必須のメソッドです。CSS セレクタに慣れていれば、直感的に使えるでしょう。