Start · Sprachen · JavaScript · Referenz · ProcessingInstruction.removeAttribute()

ProcessingInstruction.removeAttribute()

Methode

Entfernt das (Pseudo-)Attribut mit dem angegebenen Namen aus einer Verarbeitungsanweisung wie <code>&lt;?xml-stylesheet href="…"?&gt;</code>.

seit JavaScript Experimentell – noch keine Baseline, Unterstützung Kategorie: webapi

Signatur

ProcessingInstruction.prototype.removeAttribute(name)

Beschreibung

Die Methode removeAttribute() einer ProcessingInstruction entfernt das Attribut mit dem Namen name aus der Verarbeitungsanweisung. Mit Attributen sind hier die sogenannten Pseudo-Attribute im Datenteil gemeint, etwa href und type in <?xml-stylesheet href="style.css" type="text/css"?>. Das Verhalten entspricht Element.removeAttribute(): Gibt es kein Attribut mit diesem Namen, passiert nichts und es wird auch kein Fehler ausgelöst.

Bisher bestand eine Verarbeitungsanweisung aus Sicht des DOM nur aus target (z. B. xml-stylesheet) und einem unstrukturierten Text in data. Wer einzelne Pseudo-Attribute ändern wollte, musste diesen Text selbst zerlegen und wieder zusammensetzen. Die Attribut-Methoden (getAttribute(), setAttribute(), hasAttribute(), removeAttribute()) nehmen einem diese Arbeit ab. Die Eigenschaft data bleibt dabei stimmig und wird entsprechend angepasst.

Typische Anwendungsfälle sind das nachträgliche Ändern von Stylesheet-Verknüpfungen in XML-Dokumenten, das Aufräumen von Verarbeitungsanweisungen vor dem Serialisieren mit XMLSerializer und die Arbeit mit neueren HTML-Verarbeitungsanweisungen, die als Markierungen im Dokument dienen.

Parameter

Name Typ Default Beschreibung
$name Pflicht string Name des Attributs, das entfernt werden soll, z. B. "media". Andere Werte werden in einen String umgewandelt. Existiert das Attribut nicht, bleibt der Aufruf ohne Wirkung.

Rückgabewert

Typ
undefined
Beschreibung
Kein Rückgabewert. Ob das Attribut vorher vorhanden war, lässt sich mit hasAttribute() prüfen.

Beispiele

Attribut aus einer xml-stylesheet-Anweisung entfernen (mit Feature-Erkennung)

const doc = document.implementation.createDocument(null, 'root', null);
const pi = doc.createProcessingInstruction(
  'xml-stylesheet',
  'href="print.css" type="text/css" media="print"'
);
doc.insertBefore(pi, doc.documentElement);

if (typeof pi.removeAttribute === 'function') {
  pi.removeAttribute('media');
  console.log(pi.data);
} else {
  console.log('removeAttribute() wird von diesem Browser nicht unterstützt');
}
href="print.css" type="text/css"

Fallback: Pseudo-Attribut direkt aus data entfernen

// Für Browser ohne native Unterstützung
const removePiAttribute = (pi, name) => {
  if (typeof pi.removeAttribute === 'function') {
    pi.removeAttribute(name);
    return;
  }
  const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  const re = new RegExp(`\\s*\\b${escaped}\\s*=\\s*("[^"]*"|'[^']*')`, 'g');
  pi.data = pi.data.replace(re, '').trim();
};

const doc = new DOMParser().parseFromString(
  '<?xml-stylesheet href="a.xsl" type="text/xsl" alternate="yes"?><root/>',
  'application/xml'
);
const pi = doc.firstChild;
removePiAttribute(pi, 'alternate');
console.log(new XMLSerializer().serializeToString(doc));
<?xml-stylesheet href="a.xsl" type="text/xsl"?><root/>

Nicht vorhandenes Attribut entfernen ist harmlos

const doc = document.implementation.createDocument(null, 'root', null);
const pi = doc.createProcessingInstruction('xml-stylesheet', 'href="main.css"');

if ('removeAttribute' in pi) {
  pi.removeAttribute('title'); // existiert nicht, wirft keinen Fehler
  console.log(pi.hasAttribute('title'), pi.data);
}
false href="main.css"

// Wichtig · Fallstricke

  • Kompatibilität: Die Attribut-Methoden an ProcessingInstruction sind eine neue, experimentelle Erweiterung und werden noch nicht von allen Browsern unterstützt. Prüfe die Unterstützung immer vorher, z. B. mit typeof pi.removeAttribute === 'function', und sieh einen Fallback über data vor.
  • Pseudo-Attribute sind kein echtes XML: Laut XML-Spezifikation ist der Inhalt einer Verarbeitungsanweisung freier Text. Nicht jede Anweisung folgt dem Muster name="wert". Enthält data etwas anderes, ist das Ergebnis vom Zerlegen des Textes abhängig. Das gilt besonders für selbstgebaute Fallbacks mit regulären Ausdrücken.
  • Keine Wirkung auf bereits angewendete Stylesheets: Wenn du z. B. href aus xml-stylesheet entfernst, ändert sich nur das DOM. Ob der Browser die Darstellung neu berechnet, hängt vom jeweiligen Dokumenttyp und der Implementierung ab.
  • Die XML-Deklaration <?xml version="1.0"?> ist keine ProcessingInstruction-Instanz im DOM und lässt sich deshalb nicht auf diese Weise ändern.