JavaScript - querySelector()とquerySelectorAll()の違い

JavaScriptでは、セレクターを使った要素取得方法として、 querySelector()、querySelectorAll()メソッドがあります。

ここでは、この2つのメソッドの共通点と違いについて紹介します。

共通点: セレクター式で指定する

どちらもCSSで使用するセレクター式を指定します。

ですから、getElementById()などのget○○系では、 検索できない複雑な条件を指定できます。

違い: 戻り値の種類と数が違う

querySelector()の戻り値はElementオブジェクトで、 単一の要素が返ってきます。

一方、querySelectorAll()の戻り値はNodeListオブジェクトで、 複数の要素が返ってきます。

取得する要素が1つとわかっている場合や、最初の1つだけを取得したい場合は querySelector()を使い、それ以外はquerySelectorAll()を使います。

次のように、p要素が2つあるHTMLで、2つのメソッドの取得結果の違いをみてみます。

HTML


<p class="cls1">コンテンツ1</p>

<p class="cls2">コンテンツ2</p>

JavaScript


var elem = document.querySelector('p');

console.log(elem); // <p class="cls1">コンテンツ1</p>

var nodes = document.querySelectorAll('p');

console.log(nodes); // NodeList(2) [p.cls1, p.cls2]

このように、querySelector()はElementオブジェクト、 querySelectorAll()はNodeListオブジェクトを返します。

違い: 該当要素がない場合の戻り値が違う

該当要素がない場合、querySelector()の戻り値は「null」です。

一方、querySelectorAll()の戻り値は空のNodeListオブジェクトです。

サンプルコードとして、存在しない要素を指定した場合の戻り値を表示します。

「div要素」が存在しない場合、


var elem = document.querySelector('div');

console.log(elem); // null

var nodes = document.querySelectorAll('div');

console.log(nodes); // NodeList []

まとめ

・どちらのメソッドも、セレクター式で検索する点は同じです。

・querySelector()の戻り値はElementオブジェクトで、 querySelectorAll()の戻り値はNodeListオブジェクトです。

・該当要素がない場合、querySelector()は「null」を戻し、 querySelectorAll()は空のNodeListオブジェクトを戻します。