JavaScriptでDOM操作をマスターしよう!HTMLCollection要素を自在に操るループ処理のテクニック

2024-05-19

JavaScript で HTMLCollection 要素をループする for ループ

HTMLCollection とは?

HTMLCollection は、document.getElementsByTagName()document.querySelectorAll() などのメソッドによって取得することができます。これらのメソッドは、指定されたタグ名や CSS セレクタに一致するすべての要素をコレクションとして返します。

HTMLCollection は、配列 のような性質を持ちますが、いくつかの点で異なる点があります。

  • 長さ: HTMLCollection の長さは、length プロパティで取得できます。
  • 要素へのアクセス: HTMLCollection の要素には、[] 演算子を使用してインデックス番号でアクセスできます。
  • ループ処理: HTMLCollection をループするには、for ループ または forEach() メソッドを使用できます。

for ループを使用した HTMLCollection のループ処理

HTMLCollection を for ループでループ処理するには、以下の構文を使用します。

for (let i = 0; i < collection.length; i++) {
  // 要素に対する処理
}

このコードは、コレクション内の各要素に対して、インデックス番号 i を使用してループ処理を行います。各要素は、collection[i] で参照できます。

for ループの例

以下の例では、document.getElementsByTagName("li") メソッドを使用して、ul 要素内のすべての li 要素を取得し、そのテキスト内容を出力します。

const listItems = document.getElementsByTagName("li");

for (let i = 0; i < listItems.length; i++) {
  console.log(listItems[i].textContent);
}

このコードは、以下の出力を生成します。

Item 1
Item 2
Item 3

forEach() メソッドを使用したループ処理

HTMLCollection をループ処理するもう 1 つの方法は、forEach() メソッドを使用することです。forEach() メソッドは、コレクション内の各要素に対して、コールバック関数を呼び出します。

collection.forEach(function(element, index) {
  // 要素に対する処理
});

このコードは、forEach() メソッドに渡されたコールバック関数が、コレクション内の各要素に対して呼び出されます。コールバック関数には、要素自体とインデックス番号が引数として渡されます。

forEach() メソッドの例

以下の例では、forEach() メソッドを使用して、ul 要素内のすべての li 要素の背景色を青色に変更します。

const listItems = document.getElementsByTagName("li");

listItems.forEach(function(listItem) {
  listItem.style.backgroundColor = "blue";
});

このコードは、すべての li 要素の背景色が青色に変更されます。

for ループforEach() メソッドを使用して、HTMLCollection 内の各要素を効率的に処理することができます。これらの方法は、DOM 操作や要素のスタイル変更など、さまざまなタスクに役立ちます。




サンプルコード:HTML要素を操作するJavaScript

要素のテキストコンテンツを取得する

以下のコードは、<h1> 要素のテキストコンテンツを取得してコンソールに出力します。

const heading = document.getElementById("heading");
const textContent = heading.textContent;
console.log(textContent);
Welcome to my website!

要素のスタイルを変更する

以下のコードは、p 要素のフォントサイズを 16px に設定します。

const paragraphs = document.getElementsByTagName("p");

for (let i = 0; i < paragraphs.length; i++) {
  paragraphs[i].style.fontSize = "16px";
}

要素を非表示にする

以下のコードは、id="hidden" 要素を非表示にします。

const element = document.getElementById("hidden");
element.style.display = "none";

要素を作成する

以下のコードは、新しい div 要素を作成し、その中にテキストコンテンツを追加します。

const newElement = document.createElement("div");
newElement.textContent = "This is a new element.";

const parentElement = document.getElementById("parent");
parentElement.appendChild(newElement);
This is a new element.

イベントリスナーを追加する

以下のコードは、ボタンをクリックしたときにコンソールにメッセージを出力するイベントリスナーを追加します。

const button = document.getElementById("button");

button.addEventListener("click", function() {
  console.log("Button clicked!");
});

このコードは、ボタンをクリックすると、以下の出力がコンソールに表示されます。

Button clicked!

これらの例は、JavaScript で HTML 要素を操作するためのほんの一例です。JavaScript で DOM を操作するには、他にも多くの方法があります。詳細については、MDN Web Docs を参照してください。




HTMLCollection要素をループ処理するその他の方法

Array.from() メソッドを使用して、HTMLCollection を配列に変換してから、標準の Array メソッドを使用してループ処理することができます。この方法は、新しい構文に慣れている場合や、Array メソッドですでに使い慣れている場合に役立ちます。

const listItems = Array.from(document.getElementsByTagName("li"));

for (const listItem of listItems) {
  console.log(listItem.textContent);
}

スプレッド構文を使用して、HTMLCollection をイテラブルに変換し、for...of ループで使用することができます。この方法は、簡潔で読みやすく、新しい構文に慣れている場合に適しています。

const listItems = document.getElementsByTagName("li");

for (const listItem of listItems) {
  console.log(listItem.textContent);
}
function* listItemIterator(list) {
  for (let i = 0; i < list.length; i++) {
    yield list[i];
  }
}

const listItems = document.getElementsByTagName("li");
const iterator = listItemIterator(listItems);

for (const listItem of iterator) {
  console.log(listItem.textContent);
}

カスタムイテレータを作成して、HTMLCollection をループ処理することができます。この方法は、最も制御性に優れていますが、複雑で冗長になる可能性があります。

class ListItemIterator {
  constructor(list) {
    this.list = list;
    this.index = 0;
  }

  next() {
    if (this.index < this.list.length) {
      const value = this.list[this.index];
      this.index++;
      return { done: false, value };
    } else {
      return { done: true };
    }
  }
}

const listItems = document.getElementsByTagName("li");
const iterator = new ListItemIterator(listItems);

for (const { value } of iterator) {
  console.log(value.textContent);
}

最良の方法を選択する

使用する方法は、特定のニーズと好みによって異なります。単純なループ処理の場合は、従来の for ループまたは forEach メソッドが適しています。配列メソッドに慣れている場合は、Array.from() を使用するのが良いでしょう。簡潔さを重視する場合は、スプレッド構文を使用するのが良いでしょう。柔軟性と制御性に優れている場合は、ジェネレータまたはカスタムイテレータを使用するのが良いでしょう。


javascript dom


状況別!HTMLボタンでフォーム送信をキャンセルするベストプラクティス

type属性を使用するHTMLボタンには、type属性という属性があります。この属性には、ボタンの種類を指定することができます。type="submit": フォームを送信するボタンデフォルトでは、type属性は省略されますが、この場合、ボタンはtype="submit"として解釈されます。フォームを送信しないボタンを作成するには、type="button"を指定します。...


issetの代わりに使える!JavaScriptで変数の存在を確認する4つの方法

typeof 演算子は、変数の型を返す演算子です。変数が存在しない場合は undefined を返します。in 演算子は、オブジェクトのプロパティが存在するかどうかを確認するために使用できます。変数がオブジェクトのプロパティである場合は true を返し、そうでない場合は false を返します。...


JavaScript、jQuery、HTMLを用いた入力欄内のクリアアイコン実装ガイド

このガイドでは、JavaScript、jQuery、HTMLを使用して入力欄内にクリアアイコンを実装する方法を段階的に説明します。必要なものテキストエディタ (例: Visual Studio Code, Sublime Text)Webブラウザ (例: Chrome...


JavaScript で選択されたラジオボタンの値を取得する方法

HTMLフォームでラジオボタンを使用する場合、ユーザーが選択したオプションの値を取得することが重要です。これは、フォームデータを処理したり、ユーザーの選択に基づいてダイナミックな動作をしたりするために役立ちます。このチュートリアルで使用するもの:...


JavaScript、Node.jsでPromise関数の使いこなしをレベルアップ!

JavaScript、Node. jsにおける非同期処理において、Promiseは重要な役割を果たします。非同期処理の結果を扱う際、Promise関数は重要な役割を果たしますが、同時に、関数に値を渡す方法も理解する必要があります。本記事では、JavaScript、Node...