[JavaScriptをわかりやすく]getElementsByClassNameで要素を一括でまとめて取得する
getElementsByClassName
を使用すると、cssのクラス名を指定してクラス名が含まれている要素を一括してすべて取得することが可能です。
早速サンプルを紹介します。サンプルの中では.box
というクラス名を指定して、class = 'box'
に該当するタグの文字色をすべて変更しています。
See the Pen getElementsByClassNameで要素を一括でまとめて取得する by Makoto Ohnami (@zohnami) on CodePen.
まずはhtmlを見てみましょう。
idがbox1〜3
のdivタグにそれぞれbox
というクラスが設定されています。
3番目のboxにはbox-special
というクラスも追加されていてクラスが複数設定されていることになりますが、これも対象になります。
<div class="container">
<div class="box" id="box1">
box1
</div>
<div class="box" id="box2">
box2
</div>
<div class="box box-special" id="box3">
box3
</div>
</div>
次はjavascriptを見てみましょう。
以下のようにgetElementsByClassName('box')
としてclass = 'box'
の要素をすべて取得してboxList
という定数に配列として複数格納しています。
querySelectorAll
とは違ってクラス名を引数に指定するときに.(ドット)
は不要です。
また、forEach
が使えません(!)
そのため、forを使用してboxListの中身をひとつずつ取得して色を変更するようにしています。
const boxList = document.getElementsByClassName('box');
// 注意! getElementsByClassNameの取得結果はforEachは使えない!
// boxList.forEach((box) => {
// box.style.color = 'red';
// });
for(let i = 0; i < boxList.length; i++) {
boxList[i].style.color = 'red';
}
紹介しておいてですが、getElementsByClassNameはあまり使用しない気がします。
コードを書くときは要素の取得方法について、ある程度ルールを決めておくとよいでしょう。
querySelectorを使う、と決めたら基本的には常にquerySelectorを使う、みたいな感じで統一をしておくとコードが読みやすく保守しやすくなるでしょう。
引数を設定するときにドットやシャープが必要なものと不要なものとそれぞれ存在するので、使用する関数をある程度統一しておくとコードの書き間違えも減るかなと思います。
この記事の環境情報
- Google Chrome 108.0.5359.124
JavaScriptに関する他の記事を読む
- タグマネージャーでjsのloadイベントを発火させたいとき
- [JavaScriptをわかりやすく]removeメソッドで自身を動的に削除する
- [JavaScriptをわかりやすく]子要素をremoveChildで動的に削除する
- [JavaScriptをわかりやすく]insertAdjacentHTMLでタグを直接追加する
- [JavaScriptをわかりやすく]beforeとafterで指定した要素の前後に動的に要素を追加する
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら