Signatur
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
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));
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));
Standardwert SHOW_ALL erkennen
const it = document.createNodeIterator(document.body);
console.log(it.whatToShow === NodeFilter.SHOW_ALL);
console.log(it.whatToShow);
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));
// Wichtig · Fallstricke
Worauf du achten solltest:
- Nur lesbar: Du kannst
whatToShownach dem Erzeugen des Iterators nicht mehr ändern. Eine Zuweisung wird ignoriert und wirft im Strict Mode einenTypeError. 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_ALList ein vorzeichenloser Wert (4294967295), während~0den Wert-1ergibt. - Veraltete Konstanten:
SHOW_ATTRIBUTE,SHOW_CDATA_SECTION,SHOW_ENTITY_REFERENCE,SHOW_ENTITYundSHOW_NOTATIONgelten als veraltet. EinNodeIteratorliefert ohnehin keine Attributknoten, weil sie nicht Teil des Baums sind. - Reihenfolge der Filterung:
whatToShowwird vor dem optionalenfilterangewendet. 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.