タグ名で要素を取得する (getElementsByTagName)
document.getElementsByTagName()
関数を使用すると、指定したタグ名を持つ要素を取得することができます。
同じタグ名を持つ要素は複数存在する可能性があるので、戻り値は配列になります。
<p>こんにちは</p>
<p>おやすみ</p>
<script>
window.onload = function() {
const elems = document.getElementsByTagName("p");
for (const e of elems) {
console.log(e.innerText);
}
};
</script>
こんにちは
おやすみ
クラス名で要素を取得する (getElementsByClassName)
document.getElementsByClassName()
関数を使用すると、指定したクラス名が class
属性に含まれている要素を取得することができます。
そのような要素は複数存在する可能性があるので、戻り値は配列になります。
<div class="foo">AAA</div>
<div class="foo bar">BBB</div>
<div class="foo bar baz">CCC</div>
<script>
window.onload = function() {
const elems = document.getElementsByClassName("foo");
for (const e of elems) {
console.log(e.innerText);
}
};
</script>
AAA
BBB
CCC
ID で要素を取得する (getElementById)
document.getElementById()
関数を使用すると、指定した ID を id
属性に持つ要素を取得することができます。
指定した ID を持つ要素が見つからない場合は null
を返します。
<span id="message">ばよえーん</span>
<script>
window.onload = function() {
const elem = document.getElementById("message");
if (elem) {
console.log(elem.innerText); //=> ばよえーん
}
};
</script>
特定の ID を持つ要素は高々ひとつしか存在することができないので、getElementsByTagName
や getElementsByClassName
とは異なり、getElementById
は単一の要素を返すことに注意してください。
子要素からのみ検索する
document
の代わりに、特定の親要素に対して前述のメソッドを呼び出すようにすれば、その子要素だけを検索対象とすることができます。
下記の例では、まず ID で要素を検索し、次にタグ名による検索を行なっています。
<ul id="my-data">
<li>AAA</li>
<li>BBB</li>
<li>CCC</li>
</ul>
<script>
window.onload = function() {
const data = document.getElementById("my-data");
const elems = data.getElementsByTagName("li");
for (const e of elems) {
console.log(e.innerText);
}
};
</script>
AAA
BBB
CCC
セレクタ API で要素を取得する (querySelector, querySelectorAll)
CSS のセレクタ形式(#foo
や .bar
など)で要素を指定して取得したいときは、document.querySelector()
関数や document.querySelectorAll()
関数を使用します。
前者は最初に見つかった要素、後者は見つかった全ての要素を返します。
window.onload = function() {
const elem = document.querySelector("#sample");
console.log(elem);
};
window.onload = function() {
const elems = document.querySelectorAll(".sample");
console.log(elems);
};
window.onload = function() {
const elems = document.querySelectorAll("div.note");
console.log(elems);
};
window.onload = function() {
const elems = document.querySelectorAll("li:nth-child(even)");
console.log(elems);
};
☝️ jQuery と同じ?
jQuery が登場した当初は、このようなセレクタ API が使えることがひとつのウリでした。
現在は JavaScript の機能として
querySelectAll()
が使えるようになっているので、セレクタ API だけのために jQuery を使用する必要はなくなりました。