Start · Sprachen · JavaScript · Referenz · Attr.specified

Attr.specified

Eigenschaft

Die schreibgeschützte Eigenschaft <code>Attr.specified</code> gibt immer <code>true</code> zurück und existiert nur noch aus Gründen der Abwärtskompatibilität.

seit JavaScript Baseline: alle Browser (Altlast aus DOM Level 1) deprecated seit ja Kategorie: webapi

Signatur

Attr.specified

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

Typ
boolean
Beschreibung
In allen aktuellen Browsern immer 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);
href https://programmierung.net true

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);
["type", "required"] ["type", "required"]

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
true false null

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);
true

// 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 specified lassen sich Standardwerte aus der DTD oder aus HTML (z. B. type="submit" bei <button>) nicht erkennen. Nicht gesetzte Attribute haben gar keinen Attr-Knoten. getAttributeNode() gibt dann null zurü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.attributes false zurück. Nur dort war das Filtern sinnvoll.