Signatur
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
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');
}
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));
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);
}
// Wichtig · Fallstricke
- Kompatibilität: Die Attribut-Methoden an
ProcessingInstructionsind eine neue, experimentelle Erweiterung und werden noch nicht von allen Browsern unterstützt. Prüfe die Unterstützung immer vorher, z. B. mittypeof pi.removeAttribute === 'function', und sieh einen Fallback überdatavor. - 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ältdataetwas 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.
hrefausxml-stylesheetentfernst, ä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 keineProcessingInstruction-Instanz im DOM und lässt sich deshalb nicht auf diese Weise ändern.