[PR] 本記事にはプロモーションが含まれています。

【JavaScript】document.querySelectorで使えるCSSセレクターの書き方チートシート

JavaScript

 JavaScriptでDOM要素を取得する際、現代の開発において主役となるのが document.querySelector() です。このメソッドの最大の強みは、CSSと全く同じ記法(セレクター)を使って、柔軟かつピンポイントに要素を狙い撃ちできる点にあります。

この記事では、querySelector(および querySelectorAll)の引数として渡す「セレクターの書き方」をパターン別に網羅しました。

1. 基本のセレクター

まずは最も頻繁に使用する、タグ・ID・クラスによる指定です。

種類記号記述例対象となる要素
要素(タグ)(なし)querySelector('div')最初の <div> 要素
ID#querySelector('#app')id="app" を持つ要素
クラス.querySelector('.btn')class="btn" を持つ最初の要素
JavaScript
// 【実例】
const header = document.querySelector('header');
const mainTitle = document.querySelector('#title');
const submitButton = document.querySelector('.submit-btn');

2. 属性による指定(属性セレクター)

特定の属性(typehref、カスタムデータ属性の data-* など)を持つ要素を取得します。フォーム要素の取得などで非常に重宝します。

条件記述例対象となる要素
属性を持つ[disabled]disabled 属性を持つ要素
値が完全一致[type="text"]typetext の要素
値で始まる[href^="https"]hrefhttps で始まる要素
値で終わる[src$=".png"]src.png で終わる要素
値を含む[class*="icon-"]クラス名に icon- を含む要素
JavaScript
// 【実例】チェックボックスを取得
const checkbox = document.querySelector('input[type="checkbox"]');

// 【実例】特定のデータ属性を持つ要素を取得
const activeTab = document.querySelector('[data-status="active"]');

3. 階層・関係性による指定(結合子)

親要素、子要素、兄弟要素といったHTMLの構造に基づいた指定方法です。複雑なHTML構造の中から目的の要素を絞り込む際に使用します。

種類記号記述例対象となる要素
子孫(配下すべて)(空白)ul li<ul> の中にあるすべての <li>
子(直下のみ)>ul > li<ul> の直下にある <li> のみ
隣接する兄弟+h2 + p<h2> の直後に現れる <p>
後続の兄弟~h2 ~ p<h2> より後にある同じ階層の <p>
JavaScript
// 【実例】特定のクラスの中にあるリンクを取得
const navLink = document.querySelector('.nav-menu > li > a');

4. 状態や順番による指定(疑似クラス)

要素の順番や、チェック状態などの動的な状態を基準にして取得します。特に querySelectorAll と組み合わせて順番で絞り込む際によく使われます。

種類記述例対象となる要素
最初の子要素li:first-child兄弟要素の中で最初の <li>
最後の子要素li:last-child兄弟要素の中で最後の <li>
N番目の子要素li:nth-child(3)兄弟要素の中で3番目の <li>
否定(〜以外)div:not(.hidden)hidden クラスを持たない <div>
チェック済みinput:checkedチェックが入っているラジオボタンやチェックボックス
JavaScript
// 【実例】リストの2番目の要素を取得
const secondItem = document.querySelector('.list-item:nth-child(2)');

// 【実例】非表示になっていないエラーメッセージを取得
const visibleError = document.querySelector('.error-msg:not(.is-hidden)');

5. 複数の条件を組み合わせる(マルチセレクター)

複数のセレクターをカンマ , で区切ることで、「A または B」という条件で一括取得することができます。(主に querySelectorAll で活用します)

JavaScript
// h1、h2、h3のいずれかに該当する要素をすべて取得
const headings = document.querySelectorAll('h1, h2, h3');

// .btn-primary または .btn-secondary をすべて取得
const buttons = document.querySelectorAll('.btn-primary, .btn-secondary');

コメント