タグ名で要素を取得する (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
CCCID で要素を取得する (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 を使用する必要はなくなりました。