Start · Sprachen · JavaScript · Referenz · ProcessingInstruction.target

ProcessingInstruction.target

Eigenschaft

Schreibgeschützte Zeichenkette mit dem Ziel (der Zielanwendung) einer Verarbeitungsanweisung, z. B. <code>xml-stylesheet</code> in <code>&lt;?xml-stylesheet …?&gt;</code>.

seit JavaScript Baseline: alle Browser Kategorie: webapi

Signatur

ProcessingInstruction.target

Beschreibung

Die Eigenschaft target eines ProcessingInstruction-Knotens liefert den Namen der Anwendung, für die die Verarbeitungsanweisung gedacht ist. Das ist der erste Bezeichner nach <?. Bei <?xml-stylesheet href="style.css" type="text/css"?> ist das Ziel also "xml-stylesheet". Der Rest der Anweisung steht in data und hat mit target nichts zu tun.

Verarbeitungsanweisungen kommen fast nur in XML-Dokumenten vor, etwa in SVG-, XHTML- oder RSS-Dateien und in Daten, die Sie mit DOMParser als application/xml einlesen. Mit target finden Sie heraus, um welche Art von Anweisung es sich handelt. Typische Fälle sind das Aufspüren von Stylesheet-Verknüpfungen oder das Auswerten eigener, anwendungsspezifischer Anweisungen.

Der Wert ist immer derselbe wie bei Node.nodeName für diesen Knoten. Er wird beim Erzeugen festgelegt, entweder vom Parser oder mit document.createProcessingInstruction(target, data), und lässt sich danach nicht mehr ändern.

Rückgabewert

Typ
string
Beschreibung
Das Ziel der Verarbeitungsanweisung, z. B. "xml-stylesheet". Entspricht nodeName des Knotens.

Beispiele

Ziel einer geparsten Verarbeitungsanweisung auslesen

const xml = `<?xml version="1.0"?>
<?xml-stylesheet href="style.css" type="text/css"?>
<root/>`;

const doc = new DOMParser().parseFromString(xml, 'application/xml');
const pi = doc.firstChild; // Die XML-Deklaration ist kein Knoten

console.log(pi.nodeType === Node.PROCESSING_INSTRUCTION_NODE);
console.log(pi.target);
console.log(pi.data);
true xml-stylesheet href="style.css" type="text/css"

Verarbeitungsanweisung erzeugen und target prüfen

const doc = document.implementation.createDocument(null, 'config', null);
const pi = doc.createProcessingInstruction('my-app', 'mode="debug"');
doc.insertBefore(pi, doc.documentElement);

console.log(pi.target);
console.log(pi.target === pi.nodeName);
console.log(new XMLSerializer().serializeToString(doc));
my-app true <?my-app mode="debug"?><config/>

Alle Stylesheet-Anweisungen eines XML-Dokuments finden

const findStylesheetPIs = (doc) => {
  const walker = doc.createTreeWalker(doc, NodeFilter.SHOW_PROCESSING_INSTRUCTION);
  const result = [];
  while (walker.nextNode()) {
    if (walker.currentNode.target === 'xml-stylesheet') {
      result.push(walker.currentNode.data);
    }
  }
  return result;
};

const xml = '<?xml-stylesheet href="a.css"?><?other x?><?xml-stylesheet href="b.xsl" type="text/xsl"?><feed/>';
const doc = new DOMParser().parseFromString(xml, 'application/xml');
console.log(findStylesheetPIs(doc));
[ 'href="a.css"', 'href="b.xsl" type="text/xsl"' ]

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung an target wird im nicht-strikten Modus stillschweigend ignoriert und löst im strikten Modus einen TypeError aus. Wenn Sie ein anderes Ziel brauchen, erzeugen Sie einen neuen Knoten und tauschen ihn mit replaceWith() aus.
  • XML-Deklaration: <?xml version="1.0"?> ist keine Verarbeitungsanweisung und erscheint deshalb nicht als Knoten im DOM. Wenn Sie target === 'xml' abfragen, finden Sie sie also nicht.
  • HTML-Dokumente: Der HTML-Parser macht aus <?…?> einen Kommentar (Comment) statt eines ProcessingInstruction-Knotens. Verarbeitungsanweisungen gibt es daher praktisch nur in XML-Dokumenten.
  • Erzeugen: createProcessingInstruction() wirft einen InvalidCharacterError, wenn das Ziel kein gültiger XML-Name ist oder die Daten ?> enthalten. Seit einer Aktualisierung des Standards ist der Aufruf auch in HTML-Dokumenten erlaubt.
  • Die Eigenschaft wird von allen Browsern unterstützt, ebenso von Node.js-DOM-Implementierungen wie jsdom.