Signatur
Beschreibung
Die Eigenschaft specified eines Attr-Knotens gab früher an, ob ein Attribut ausdrücklich im Dokument gesetzt wurde (true) oder ob es nur über einen Standardwert aus der DTD vorhanden war (false). Das stammt aus DOM Level 1/2, als XML-Dokumente mit DTD-Standardattributen noch verbreitet waren.
Laut aktuellem DOM Living Standard gibt specified immer true zurück. Ein Attr-Objekt gibt es nur dann, wenn das Attribut tatsächlich am Element vorhanden ist. Damit sagt die Eigenschaft nichts mehr aus.
In neuem Code solltest du specified nicht verwenden. Ob ein Attribut vorhanden ist, prüfst du mit Element.prototype.hasAttribute() oder Element.prototype.getAttributeNode(). Die Eigenschaft ist vor allem dann wichtig, wenn du Altcode verstehen oder umbauen willst, der z. B. über element.attributes läuft und nach specified filtert. Das kommt aus alten Internet-Explorer-Versionen, die dort auch nicht gesetzte Attribute auflisteten.
Rückgabewert
true.Beispiele
specified an einem Attributknoten auslesen
const link = document.createElement('a');
link.setAttribute('href', 'https://programmierung.net');
const attr = link.getAttributeNode('href');
console.log(attr.name, attr.value);
console.log(attr.specified);
Altcode umbauen: Filtern nach specified ist überflüssig
const input = document.createElement('input');
input.setAttribute('type', 'email');
input.setAttribute('required', '');
// Altes Muster (für den IE nötig, heute wirkungslos):
const alt = [...input.attributes].filter((a) => a.specified).map((a) => a.name);
// Modernes Äquivalent:
const neu = input.getAttributeNames();
console.log(alt);
console.log(neu);
Vorhandensein eines Attributs richtig prüfen
const button = document.createElement('button');
button.setAttribute('disabled', '');
// Nicht so: specified sagt nichts aus
// Stattdessen:
console.log(button.hasAttribute('disabled'));
console.log(button.hasAttribute('type'));
console.log(button.getAttributeNode('type')); // null statt Attr mit specified=false
Schreibversuche werden ignoriert
const div = document.createElement('div');
div.setAttribute('id', 'box');
const attr = div.getAttributeNode('id');
attr.specified = false; // im nicht-strikten Modus stillschweigend ignoriert
console.log(attr.specified);
// Wichtig · Fallstricke
- Veraltet in der Praxis: Die Eigenschaft steht aus Kompatibilitätsgründen noch im Standard, liefert aber immer
true. Verwende sie nicht, um Programmlogik zu steuern. - Kein Standardwert-Erkennen: Mit
specifiedlassen sich Standardwerte aus der DTD oder aus HTML (z. B.type="submit"bei<button>) nicht erkennen. Nicht gesetzte Attribute haben gar keinenAttr-Knoten.getAttributeNode()gibt dannnullzurück. - Schreibgeschützt: Eine Zuweisung hat keine Wirkung. Nur Getter, kein Setter: Im strikten Modus (z. B. in ES-Modulen) wirft die Zuweisung einen
TypeError. - Browser-Kompatibilität: In allen modernen Browsern vorhanden. Ältere Internet-Explorer-Versionen (≤ 8) gaben für nicht gesetzte Attribute in
element.attributesfalsezurück. Nur dort war das Filtern sinnvoll.