Start · Sprachen · JavaScript · Referenz · NodeIterator.whatToShow

NodeIterator.whatToShow

Eigenschaft

Schreibgeschützte Bitmaske (<code>unsigned long</code>), die angibt, welche Knotentypen ein <code>NodeIterator</code> beim Durchlaufen berücksichtigt.

seit JavaScript Baseline: alle Browser (DOM Level 2 Traversal) Kategorie: webapi

Signatur

get NodeIterator.whatToShow

Beschreibung

Die schreibgeschützte Eigenschaft whatToShow liefert die Bitmaske zurück, die beim Erzeugen des Iterators über document.createNodeIterator(root, whatToShow, filter) übergeben wurde. Jedes gesetzte Bit steht für einen Knotentyp, den der Iterator zurückgibt, z. B. NodeFilter.SHOW_ELEMENT (0x1) oder NodeFilter.SHOW_TEXT (0x4). Der Standardwert NodeFilter.SHOW_ALL entspricht 0xFFFFFFFF, als Zahl also 4294967295.

Die Eigenschaft ist nützlich, wenn du einen Iterator an eine andere Funktion übergibst und dort prüfen willst, welche Knotentypen er liefert. Das passiert zum Beispiel in Hilfsbibliotheken, in Debug-Code oder wenn ein Filter nur für bestimmte Konfigurationen gedacht ist. Ob ein Bit gesetzt ist, prüfst du mit dem bitweisen UND-Operator: (iterator.whatToShow & NodeFilter.SHOW_TEXT) !== 0.

Wichtige Konstanten sind:

  • NodeFilter.SHOW_ELEMENT (1)
  • NodeFilter.SHOW_TEXT (4)
  • NodeFilter.SHOW_COMMENT (128)
  • NodeFilter.SHOW_DOCUMENT (256)
  • NodeFilter.SHOW_DOCUMENT_FRAGMENT (1024)
  • NodeFilter.SHOW_ALL (4294967295)

Mehrere Konstanten kombinierst du mit dem bitweisen ODER-Operator |.

Rückgabewert

Typ
number
Beschreibung
Eine vorzeichenlose 32-Bit-Ganzzahl. Sie ist eine Bitmaske aus NodeFilter.SHOW_*-Konstanten.

Beispiele

Bitmaske eines Iterators auslesen

const iterator = document.createNodeIterator(
  document.body,
  NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT
);

console.log(iterator.whatToShow);
console.log(iterator.whatToShow.toString(2));
129 10000001

Prüfen, ob Textknoten enthalten sind

const describe = (it) => {
  const types = [];
  if (it.whatToShow & NodeFilter.SHOW_ELEMENT) types.push('Elemente');
  if (it.whatToShow & NodeFilter.SHOW_TEXT) types.push('Text');
  if (it.whatToShow & NodeFilter.SHOW_COMMENT) types.push('Kommentare');
  return types.join(', ');
};

const it = document.createNodeIterator(document.body, NodeFilter.SHOW_TEXT);
console.log(describe(it));
Text

Standardwert SHOW_ALL erkennen

const it = document.createNodeIterator(document.body);

console.log(it.whatToShow === NodeFilter.SHOW_ALL);
console.log(it.whatToShow);
true 4294967295

Alle Kommentare eines Dokuments einsammeln

const collectComments = (root) => {
  const it = document.createNodeIterator(root, NodeFilter.SHOW_COMMENT);
  console.assert(it.whatToShow === NodeFilter.SHOW_COMMENT);
  const result = [];
  let node;
  while ((node = it.nextNode())) result.push(node.nodeValue.trim());
  return result;
};

console.log(collectComments(document.documentElement));
["Kommentartext 1", "Kommentartext 2"]

// Wichtig · Fallstricke

Worauf du achten solltest:

  • Nur lesbar: Du kannst whatToShow nach dem Erzeugen des Iterators nicht mehr ändern. Eine Zuweisung wird ignoriert und wirft im Strict Mode einen TypeError. Für andere Knotentypen erzeugst du einen neuen Iterator.
  • Bitprüfung: Vergleiche nicht mit ===, wenn mehrere Bits gesetzt sein können. Prüfe stattdessen mit &. SHOW_ALL ist ein vorzeichenloser Wert (4294967295), während ~0 den Wert -1 ergibt.
  • Veraltete Konstanten: SHOW_ATTRIBUTE, SHOW_CDATA_SECTION, SHOW_ENTITY_REFERENCE, SHOW_ENTITY und SHOW_NOTATION gelten als veraltet. Ein NodeIterator liefert ohnehin keine Attributknoten, weil sie nicht Teil des Baums sind.
  • Reihenfolge der Filterung: whatToShow wird vor dem optionalen filter angewendet. Die Filterfunktion wird nur für Knoten aufgerufen, deren Typ in der Bitmaske enthalten ist.
  • Kompatibilität: Die Eigenschaft wird von allen modernen Browsern unterstützt, auch von alten wie dem IE 9.