Signatur
Beschreibung
Mit document.getElementsByName() findet man alle Elemente, deren name-Attribut einem bestimmten Wert entspricht. Das kommt vor allem bei Formularen vor: Radiobuttons einer Gruppe, gleichnamige Checkboxen oder <meta name="…">-Tags haben denselben name. Der Vergleich beachtet Groß- und Kleinschreibung und muss exakt passen.
Zurückgegeben wird eine live NodeList. Sie ändert sich also automatisch mit, wenn später Elemente mit diesem Namen ins DOM eingefügt oder daraus entfernt werden. Die NodeList kennt forEach(), length und item(), aber kein map() oder filter(). Dafür wandelt man sie erst mit Array.from() oder dem Spread-Operator in ein Array um.
Die Methode gibt es nur auf document, nicht auf einzelnen Elementen. Wer nur innerhalb eines Formulars oder Containers suchen will, nimmt form.elements.namedItem(name) oder container.querySelectorAll('[name="…"]').
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $name Pflicht | string | Wert des name-Attributs, nach dem gesucht wird. Groß- und Kleinschreibung werden unterschieden. Andere Typen werden in einen String umgewandelt. |
Rückgabewert
NodeList mit allen passenden Elementen in Dokumentreihenfolge. Gibt es keinen Treffer, ist sie leer (length === 0). Die Methode gibt nie null zurück.Beispiele
Ausgewählten Radiobutton einer Gruppe ermitteln
// HTML:
// <input type="radio" name="versand" value="standard" checked>
// <input type="radio" name="versand" value="express">
const getVersandart = () => {
const radios = document.getElementsByName('versand');
const gewaehlt = Array.from(radios).find((r) => r.checked);
return gewaehlt ? gewaehlt.value : null;
};
console.log(getVersandart());
Alle Checkboxen einer Gruppe auswerten
// HTML: mehrere <input type="checkbox" name="interessen" value="…">
const ausgewaehlteInteressen = [...document.getElementsByName('interessen')]
.filter((cb) => cb.checked)
.map((cb) => cb.value);
console.log(ausgewaehlteInteressen);
Meta-Tag auslesen
// HTML: <meta name="description" content="Referenz für Webentwickler">
const [meta] = document.getElementsByName('description');
console.log(meta?.content ?? 'keine Beschreibung');
Live-Verhalten der NodeList
const felder = document.getElementsByName('tag');
console.log(felder.length); // 0
const input = document.createElement('input');
input.name = 'tag';
document.body.append(input);
// Dieselbe NodeList enthält jetzt das neue Element
console.log(felder.length);
// Wichtig · Fallstricke
- Live-Sammlung: Wer in einer Schleife über die Liste gleichzeitig Elemente entfernt oder einfügt, bekommt unerwartete Ergebnisse. Deshalb die Liste vorher mit
Array.from()kopieren. - Kein Array:
map(),filter()undreduce()fehlen.forEach()ist vorhanden. - Nur auf
document:element.getElementsByNamegibt es nicht. Für eine begrenzte Suche nimmt manquerySelectorAll('[name="…"]'), die eine statische Liste liefert. Enthält der Name Sonderzeichen, gehört er mitCSS.escape()maskiert. - Altlasten im Internet Explorer: Alte IE-Versionen fanden über diese Methode auch Elemente mit passender
idund ignorierten Elemente, für die keinname-Attribut vorgesehen ist. Moderne Browser halten sich an die HTML-Spezifikation und prüfen nur dasname-Attribut, bei allen HTML-Elementen. - Das
name-Attribut muss nicht eindeutig sein. Wer genau ein Element eindeutig ansprechen will, nimmt besseridundgetElementById().