
querySelector()、 querySelectorAll() は、CSSのセレクター(クラスや属性など)から任意の要素を取得することができる JavaScript のメソッドです。
この記事はこれらの使い方メモです。どのように取得するのか、確認しながらまとめていきます。
querySelectorの基本
JavaScriptでHTML要素を取得するには、”querySelector” の他、”getElement” から始まるいくつかのメソッドがあります。
getElement系メソッドの場合、 idで取得するなら getElementById、classなら getElementsByClassName を使用するといった感じで、それぞれ取得したい属性に対してメソッドを使い分ける必要があります。
querySelector はCSSセレクターで要素を指定できるため、getElementのようにいくつものメソッドを使い分ける必要はなく、さまざまな属性値を指定できます。またセレクターを指定してより細かく要素を指定することができるのも querySelector の特徴です。
基本の書き方
querySelector() の基本的な書き方は以下の形です。
document.querySelector("CSSセレクタ");querySelectorAll() も同じような書き方で、メソッド部分だけ変更すればOK。
document.querySelectorAll("CSSセレクタ");セレクターの指定
querySelector() や querySelectorAll() で要素を取得する条件は、idなら #id classなら .class 、HTMLタグなら div h1 と、CSSでスタイルを当てるのと同様の書き方で指定できます。
ここではいくつかの例をご紹介します。
| 複数のセレクターを取得。 →セレクターをカンマで区切る。 | .class01, .class02 |
| 要素内の子孫要素を取得。 →スペースでを使って子孫要素を指定。 | div .class01 .child |
| element直下の要素を指定する | :scope > .childここでの :scope はメソッドを呼び出した要素を選択【参照】:scope – CSS | MDN |
| 属性や属性値を指定して取得。 → [] を使って属性(値)を指定 | .class01[style].class01[name="name01"] |
| その要素を除外 →: not() を使用。 | div:not(.class01) |
querySelector と querySelectorAll どちらを使うか
querySelector() は、指定されたセレクターがその要素内で最初に一致した要素を返します。要素を見つけたらその時点でプログラムは終了です。
そのため、同じセレクターの要素があっても初めの一つしか取得することができません。
そのため、複数の要素を取得したい場合は querySelectorAll() を使用します。
例えば、以下のように同じクラス名を持つ要素が複数あるとします。
<ul>
<li class="target">リスト1</li>
<li class="target">リスト2</li>
<li class="target">リスト3</li>
<li class="">リスト4</li>
</ul>querySelector() を使って、テキストカラーを変更しようとします。
const target = document.querySelector(".target");
target.style.color = 'red';この場合、JSで指定したカラーが適用されるのは「リスト1」のみです。
querySelectorAll() を使うと、「target」クラスが当たっているリストテキスト全てに適用されます。
const target = document.querySelectorAll(".target");
target.forEach(function(value) {
value.style.color = 'red';
});querySelector()…最初の一つだけ取得querySelectorAll()…全ての要素を取得
- IDで指定する場合や特定の要素のみを取得したい場合は
querySelector()(こちらの方が処理が早く短いコードで済む)。 - 複数の要素を取得したい場合は、
querySelectorAll() - id属性を持つ複数の要素を一度に取得したい場合も、
querySelectorAll()
querySelectorAll() で取得した要素を一つずつ処理する
querySelectorAll() で取得した要素は、配列に似たデータ構造が格納されます。そのため、各要素を1つずつ処理するために「forEach」を使います。
const target = document.querySelectorAll(".target");
target.forEach(function(value) {
value.style.color = 'red';
});【メモ】
target.forEach() で繰り返し処理を実行。function(value){} の「value」に取得した要素が一つずつ格納されるため、「value」を使って行いたい処理を実行させる。
全ての要素を取得しつつ、一つの要素のみに何かしたい場合はインデックスを指定すると、要素内の一つを取得することができます。
let target = target.item(0);
// 以下の形でも取得可能
let target = target[0];【メモ】
インデックスはHTMLの記述順に割り当てられ、0, 1, 2, 3… と続きます。
querySelector() はここで指定した target[0] と意味合い的には同じ。
取得した要素の数を取得する場合は length 。
let target = target.length;カテゴリー : JavaScript