Element: getElementsByClassName() Methode

Die Element-Methode getElementsByClassName() gibt eine live HTMLCollection zurück, die jedes Nachfahrelement enthält, das den angegebenen Klassennamen oder die Klassennamen hat.

Die Methode getElementsByClassName() auf der Document-Schnittstelle funktioniert im Wesentlichen auf die gleiche Weise, außer dass sie auf das gesamte Dokument wirkt, beginnend beim Dokument-Wurzelknoten.

Syntax

js
getElementsByClassName(names)

Parameter

names

Ein String, der einen oder mehrere Klassennamen enthält, die durch Leerzeichen getrennt sind, um darauf abzugleichen.

Rückgabewert

Eine HTMLCollection, die eine sich live aktualisierende Liste von jedem Element bereitstellt, das Mitglied jeder Klasse in names ist.

Nutzungshinweise

Wie immer ist die zurückgegebene Sammlung live, was bedeutet, dass sie immer den aktuellen Zustand des DOM-Baums widerspiegelt, der am Element verwurzelt ist, auf dem die Funktion aufgerufen wurde. Wenn neue Elemente, die mit names übereinstimmen, zum Unterbaum hinzugefügt werden, erscheinen sie sofort in der Sammlung. Ebenso, wenn ein vorhandenes Element, das nicht mit names übereinstimmt, seine Klassen so anpasst, dass es übereinstimmt, erscheint es sofort in der Sammlung.

Das Gegenteil ist auch wahr; sobald Elemente nicht mehr mit der Menge von Namen übereinstimmen, werden sie sofort aus der Sammlung entfernt.

Hinweis: Im Quirks-Modus werden die Klassennamen in einer nicht case-sensitiven Weise verglichen. Andernfalls sind sie case-sensitiv.

Beispiele

Übereinstimmung einer einzelnen Klasse

Um nach Elementen zu suchen, die unter ihren Klassen eine bestimmte Klasse einschließen, geben wir einfach diesen Klassennamen beim Aufruf von getElementsByClassName() an:

js
element.getElementsByClassName("test");

Dieses Beispiel findet alle Elemente, die eine Klasse test haben und auch ein Nachfahre des Elements sind, das die id von main hat:

js
document.getElementById("main").getElementsByClassName("test");

Übereinstimmung mehrerer Klassen

Um Elemente zu finden, deren Klassenlisten sowohl die red- als auch die test-Klassen beinhalten:

js
element.getElementsByClassName("red test");

Untersuchung der Ergebnisse

Sie können entweder die item()-Methode auf der zurückgegebenen HTMLCollection oder die Standard-Array-Syntax verwenden, um einzelne Elemente in der Sammlung zu untersuchen. Der folgende Code funktioniert jedoch nicht wie erwartet, da "matches" sich ändern wird, sobald eine "color-box"-Klasse entfernt wird.

js
const matches = element.getElementsByClassName("color-box");

for (let i = 0; i < matches.length; i++) {
  matches[i].classList.remove("color-box");
  matches.item(i).classList.add("hue-frame");
}

Stattdessen verwenden Sie eine andere Methode, wie:

js
const matches = element.getElementsByClassName("color-box");

while (matches.length > 0) {
  matches.item(0).classList.add("hue-frame");
  matches[0].classList.remove("color-box");
}

Dieser Code findet Nachfahrelemente mit der Klasse "color-box", fügt die Klasse "hue-frame" hinzu, indem er item(0) aufruft, und entfernt dann "color-box" (unter Verwendung der Array-Notation). Ein weiteres Element (falls vorhanden) wird dann zu item(0).

Filtern der Ergebnisse mithilfe von Array-Methoden

Wir können auch Array-Methoden auf jede HTMLCollection anwenden, indem wir die HTMLCollection als this-Wert der Methode übergeben. Hier finden wir alle <div>-Elemente, die eine Klasse test haben:

js
const testElements = document.getElementsByClassName("test");
const testDivs = Array.prototype.filter.call(
  testElements,
  (testElement) => testElement.nodeName === "DIV",
);

Spezifikationen

Specification
DOM Standard
# ref-for-dom-element-getelementsbyclassname

Browser-Kompatibilität

BCD tables only load in the browser