Document: getElementsByClassName() Methode
Die getElementsByClassName
-Methode des Document
-Interfaces gibt ein array-ähnliches Objekt aller Kind-Elemente zurück, die alle angegebenen Klassennamen besitzen.
Wenn sie auf das document
-Objekt aufgerufen wird, wird das gesamte Dokument durchsucht, einschließlich des Wurzelknotens. Sie können getElementsByClassName()
auch auf jedem Element aufrufen; es werden nur Elemente zurückgegeben, die Nachfolger des angegebenen Wurzelelements mit den angegebenen Klassennamen sind.
Warnung: Dies ist eine Live-HTMLCollection
. Änderungen im DOM
werden im Array widergespiegelt, sobald die Änderungen auftreten. Wenn ein durch dieses Array ausgewähltes Element nicht mehr für den Selektor qualifiziert ist, wird es automatisch entfernt. Beachten Sie dies zu Iterationszwecken.
Syntax
getElementsByClassName(names)
Parameter
names
-
Ein String, der den/die zu treffenden Klassennamen darstellt; mehrere Klassen werden durch Leerzeichen getrennt.
Rückgabewert
Eine Live-HTMLCollection
der gefundenen Elemente.
Beispiele
Holen Sie sich alle Elemente, die eine Klasse 'test' haben:
document.getElementsByClassName("test");
Holen Sie sich alle Elemente, die sowohl die 'red'- als auch die 'test'-Klassen haben:
document.getElementsByClassName("red test");
Holen Sie sich alle Elemente, die eine Klasse 'test' innerhalb eines Elements mit der ID 'main' haben:
document.getElementById("main").getElementsByClassName("test");
Holen Sie sich das erste Element mit einer Klasse 'test' oder undefined
, wenn es kein übereinstimmendes Element gibt:
document.getElementsByClassName("test")[0];
Wir können auch Methoden von Array.prototype
auf jede HTMLCollection
anwenden, indem wir die HTMLCollection
als this-Wert der Methode übergeben. Hier werden wir alle div-Elemente finden, die eine Klasse 'test' haben:
const testElements = document.getElementsByClassName("test");
const testDivs = Array.prototype.filter.call(
testElements,
(testElement) => testElement.nodeName === "DIV",
);
Holen Sie sich das erste Element dessen Klasse 'test' ist
Dies ist die am häufigsten verwendete Betriebsart.
<html lang="en">
<body>
<div id="parent-id">
<p>hello world 1</p>
<p class="test">hello world 2</p>
<p>hello world 3</p>
<p>hello world 4</p>
</div>
<script>
const parentDOM = document.getElementById("parent-id");
const test = parentDOM.getElementsByClassName("test"); // a list of matching elements, *not* the element itself
console.log(test); // HTMLCollection[1]
const testTarget = parentDOM.getElementsByClassName("test")[0]; // the first element, as we wanted
console.log(testTarget); // <p class="test">hello world 2</p>
</script>
</body>
</html>
Beispiel für mehrere Klassen
document.getElementsByClassName
funktioniert sehr ähnlich wie document.querySelector
und document.querySelectorAll
. Es werden nur Elemente mit ALLEN der angegebenen Klassennamen ausgewählt.
HTML
<span class="orange fruit">Orange Fruit</span>
<span class="orange juice">Orange Juice</span>
<span class="apple juice">Apple Juice</span>
<span class="foo bar">Something Random</span>
<textarea id="resultArea" style="width:98%;height:7em"></textarea>
JavaScript
// getElementsByClassName only selects elements that have both given classes
const allOrangeJuiceByClass = document.getElementsByClassName("orange juice");
let result = "document.getElementsByClassName('orange juice')";
for (let i = 0; i < allOrangeJuiceByClass.length; i++) {
result += `\n ${allOrangeJuiceByClass[i].textContent}`;
}
// querySelector only selects full complete matches
const allOrangeJuiceQuery = document.querySelectorAll(".orange.juice");
result += "\n\ndocument.querySelectorAll('.orange.juice')";
for (let i = 0; i < allOrangeJuiceQuery.length; i++) {
result += `\n ${allOrangeJuiceQuery[i].textContent}`;
}
document.getElementById("resultArea").value = result;
Ergebnis
Spezifikationen
Specification |
---|
DOM Standard # ref-for-dom-document-getelementsbyclassname① |
Browser-Kompatibilität
BCD tables only load in the browser