概要: このチュートリアルでは、JavaScriptのquerySelector()
とquerySelectorAll()
を使って、CSSセレクターに基づいて要素を検索する方法を学びます。
JavaScript querySelector() および querySelectorAll() メソッドの紹介
querySelector()
はElement
インターフェースのメソッドです。querySelector()
メソッドを使用すると、1つ以上のCSSセレクターに一致する最初の要素を選択できます。
以下は、querySelector()
メソッドの構文を示しています。
let element = parentNode.querySelector(selector);
Code language: JavaScript (javascript)
この構文では、selector
は、parentNode
の子孫要素に一致させるためのCSSセレクター、またはCSSセレクターのグループです。
selector
が有効なCSS構文でない場合、このメソッドはSyntaxError
例外を発生させます。
CSSセレクターに一致する要素がない場合、querySelector()
はnull
を返します。
querySelector()
メソッドは、document
オブジェクトまたは任意のElement
オブジェクトで使用できます。
querySelector()
に加えて、querySelectorAll()
メソッドを使用して、CSSセレクターまたはCSSセレクターのグループに一致するすべての要素を選択できます。
let elementList = parentNode.querySelectorAll(selector);
Code language: JavaScript (javascript)
querySelectorAll()
メソッドは、CSSセレクターに一致する要素の静的なNodeList
を返します。一致する要素がない場合は、空のNodeList
を返します。
NodeList
は配列のようなオブジェクトであり、配列オブジェクトではないことに注意してください。ただし、最近のWebブラウザでは、forEach()
メソッドまたはfor...of
ループを使用できます。
NodeList
を配列に変換するには、次のようにArray.from()
メソッドを使用します。
let nodeList = document.querySelectorAll(selector);
let elements = Array.from(nodeList);
Code language: JavaScript (javascript)
基本的なセレクター
次のHTMLドキュメントがあると仮定します。
<!DOCTYPE html>
<html lang="en">
<head>
<title>querySelector() Demo</title>
</head>
<body>
<header>
<div id="logo">
<img src="img/logo.jpg" alt="Logo" id="logo">
</div>
<nav class="primary-nav">
<ul>
<li class="menu-item current"><a href="#home">Home</a></li>
<li class="menu-item"><a href="#services">Services</a></li>
<li class="menu-item"><a href="#about">About</a></li>
<li class="menu-item"><a href="#contact">Contact</a></li>
</ul>
</nav>
</header>
<main>
<h1>Welcome to the JS Dev Agency</h1>
<div class="container">
<section class="section-a">
<h2>UI/UX</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem placeat, atque accusamus voluptas
laudantium facilis iure adipisci ab veritatis eos neque culpa id nostrum tempora tempore minima.
Adipisci, obcaecati repellat.</p>
<button>Read More</button>
</section>
<section class="section-b">
<h2>PWA Development</h2>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Magni fugiat similique illo nobis quibusdam
commodi aspernatur, tempora doloribus quod, consectetur deserunt, facilis natus optio. Iure
provident labore nihil in earum.</p>
<button>Read More</button>
</section>
<section class="section-c">
<h2>Mobile App Dev</h2>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi eos culpa laudantium consequatur ea!
Quibusdam, iure obcaecati. Adipisci deserunt, alias repellat eligendi odit labore! Fugit iste sit
laborum debitis eos?</p>
<button>Read More</button>
</section>
</div>
</main>
<script src="js/main.js"></script>
</body>
</html>
Code language: HTML, XML (xml)
1) ユニバーサルセレクター
ユニバーサルセレクターは*
で表され、すべてのタイプの要素に一致します。
*
次の例では、querySelector()
を使用してドキュメント内の最初の要素を選択します。
let element = document.querySelector('*');
Code language: JavaScript (javascript)
そして、これはドキュメント内のすべての要素を選択します。
let elements = document.querySelectorAll('*');
Code language: JavaScript (javascript)
2) タイプセレクター
ノード名で要素を選択するには、タイプセレクターを使用します。たとえば、a
はすべての<a>
要素を選択します。
elementName
次の例では、ドキュメント内の最初のh1
要素を検索します。
let firstHeading = document.querySelector('h1');
Code language: JavaScript (javascript)
次の例では、すべてのh2
要素を検索します。
let heading2 = document.querySelectorAll('h2');
Code language: JavaScript (javascript)
3) クラスセレクター
特定のCSSクラスを持つ要素を検索するには、クラスセレクター構文を使用します。
.className
Code language: CSS (css)
次の例では、menu-item
クラスを持つ最初の要素を検索します。
let note = document.querySelector('.menu-item');
Code language: JavaScript (javascript)
次の例では、menu
クラスを持つすべての要素を検索します。
let notes = document.querySelectorAll('.menu-item');
Code language: JavaScript (javascript)
4) IDセレクター
idの値に基づいて要素を選択するには、idセレクター構文を使用します。
#id
Code language: CSS (css)
次の例では、idが#logo
の最初の要素を検索します。
let logo = document.querySelector('#logo');
Code language: JavaScript (javascript)
id
はドキュメント内で一意である必要があるため、querySelectorAll()
は適切ではありません。
5) 属性セレクター
特定の属性を持つすべての要素を選択するには、次の属性セレクター構文のいずれかを使用します。
[attribute]
[attribute=value]
[attribute~=value]
[attribute|=value]
[attribute^=value]
[attribute$=value]
[attribute*$*=value]
Code language: JSON / JSON with Comments (json)
次の例では、任意の値を持つ属性[autoplay]
を持つ最初の要素を検索します。
let autoplay = document.querySelector('[autoplay]');
Code language: JavaScript (javascript)
次の例では、任意の値を持つ[autoplay]
属性を持つすべての要素を検索します。
let autoplays = document.querySelectorAll('[autoplay]');
Code language: JavaScript (javascript)
セレクターのグループ化
複数のセレクターをグループ化するには、次の構文を使用します。
selector, selector, ...
セレクターリストは、グループ内のセレクターのいずれかに一致するすべての要素に一致します。
次の例では、すべての<div>
要素と<p>
要素を検索します。
let elements = document.querySelectorAll('div, p');
Code language: JavaScript (javascript)
結合子
1) 子孫結合子
ノードの子孫を検索するには、スペース( )の子孫結合子構文を使用します。
selector selector
たとえば、p a
は、p
要素内のすべての<a>
要素に一致します。
let links = document.querySelector('p a');
Code language: JavaScript (javascript)
2) 子結合子
>
の子結合子は、最初の要素の直接の子であるすべての要素を検索します。
selector > selector
次の例では、<ul>
要素の直下にあるすべてのli
要素を検索します。
let listItems = document.querySelectorAll('ul > li');
Code language: JavaScript (javascript)
nav
クラスを持つ<ul>
要素の直下にあるすべてのli
要素を選択するには
let listItems = document.querySelectorAll('ul.nav > li');
Code language: JavaScript (javascript)
3) 一般兄弟結合子
~
結合子は、同じ親を共有する兄弟を選択します。
selector ~ selector
たとえば、p ~ a
は、p
要素の後に続くすべての<a>
要素に、直接的かどうかにかかわらず、一致します。
let links = document.querySelectorAll('p ~ a');
Code language: JavaScript (javascript)
4) 隣接兄弟結合子
+
の隣接兄弟結合子は、隣接する兄弟を選択します。
selector + selector
たとえば、h1 + a
は、h1
の直後に続くすべての要素に一致します。
let links = document.querySelectorAll('h1 + a');
Code language: JavaScript (javascript)
h1
の直後に続く最初の<a>
を選択します。
let links = document.querySelector('h1 + a');
Code language: JavaScript (javascript)
疑似
1) 疑似クラス
:
疑似クラスは、要素の状態に基づいて要素を一致させます。
element:state
Code language: CSS (css)
たとえば、li:nth-child(2)
はリスト内の2番目の<li>
要素を選択します。
let listItem = document.querySelectorAll('li:nth-child(2)');
Code language: JavaScript (javascript)
2) 疑似要素
::
はドキュメントに含まれていないエンティティを表すため、querySelector()
メソッドは疑似要素を選択できません。
概要
querySelector()
は、CSSセレクターまたはCSSセレクターのグループに一致する最初の要素を検索します。querySelectorAll()
は、CSSセレクターまたはCSSセレクターのグループに一致するすべての要素を検索します。- CSSセレクターは、CSSルールが適用される要素を定義します。