Document : méthode createTreeWalker()
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
La méthode createTreeWalker() de l'interface Document crée et retourne un nouvel objet TreeWalker.
Syntaxe
createTreeWalker(root)
createTreeWalker(root, whatToShow)
createTreeWalker(root, whatToShow, filter)
Paramètres
root-
Un nœud (
Node) racine de l'objetTreeWalker, qui est la valeur initiale deTreeWalker.currentNode. whatToShowFacultatif-
Un
unsigned longreprésentant un masque de bits créé par combinaison des propriétés de constante deNodeFilter(angl.). C'est un moyen pratique de filtrer pour certains types de nœuds. Il est par défaut0xFFFFFFFF, représentant la constanteNodeFilter.SHOW_ALL.Constante Valeur numérique Description NodeFilter.SHOW_ALL0xFFFFFFFFAffiche tous les nœuds. NodeFilter.SHOW_ATTRIBUTE0x2Affiche les nœuds Attr.NodeFilter.SHOW_CDATA_SECTION0x8Affiche les nœuds CDATASection.NodeFilter.SHOW_COMMENT0x80Affiche les nœuds Comment.NodeFilter.SHOW_DOCUMENT0x100Affiche les nœuds Document.NodeFilter.SHOW_DOCUMENT_FRAGMENT0x400Affiche les nœuds DocumentFragment.NodeFilter.SHOW_DOCUMENT_TYPE0x200Affiche les nœuds DocumentType.NodeFilter.SHOW_ELEMENT0x1Affiche les nœuds Element.NodeFilter.SHOW_ENTITYObsolète0x20Héritage, qui n'est plus en vigueur. NodeFilter.SHOW_ENTITY_REFERENCEObsolète0x10Héritage, qui n'est plus en vigueur. NodeFilter.SHOW_NOTATIONObsolète0x800Héritage, qui n'est plus en vigueur. NodeFilter.SHOW_PROCESSING_INSTRUCTION0x40Affiche les nœuds ProcessingInstruction.NodeFilter.SHOW_TEXT0x4Affiche les nœuds Text.Note : La constante
NodeFilter.SHOW_ATTRIBUTEn'est efficace que lorsque la racine est un nœud d'attribut. Étant donné que le parent de tout nœudAttrest toujoursnull,TreeWalker.nextNode()etTreeWalker.previousNode()ne retournent jamais un nœudAttr. Pour parcourir les nœudsAttr, utilisez plutôtElement.attributes. filterFacultatif-
Une fonction de rappel ou un objet avec une méthode
acceptNode(), qui retourneNodeFilter.FILTER_ACCEPT,NodeFilter.FILTER_REJECT, ouNodeFilter.FILTER_SKIP. La fonction ou la méthode sera appelée pour chaque nœud de la sous-arborescence basée surrootqui est accepté comme incluse par l'indicateurwhatToShowpour déterminer s'il faut ou non l'inclure dans la liste des nœuds itérables :- Si la valeur retournée est
NodeFilter.FILTER_ACCEPT, ce nœud est inclus. - Si la valeur retournée est
NodeFilter.FILTER_REJECT, aucun nœud de la sous-arborescence basée sur ce nœud n'est inclus. - Si la valeur retournée est
NodeFilter.FILTER_SKIP, ce nœud n'est pas inclus.
- Si la valeur retournée est
Valeur de retour
Un nouvel objet TreeWalker.
Exemples
>Utiliser whatToShow
Cet exemple utilise whatToShow pour transformer les contenus textuels en majuscules. Notez que les nœuds textuels des descendants de l'élément #root sont également parcourus malgré le fait qu'ils ne soient pas des nœuds enfants de l'élément #root.
HTML
<div id="root">
Ceci est un nœud textuel.
<span>Et ceci est un élément <code>span</code>.</span>
</div>
CSS
span {
background-color: aqua;
}
JavaScript
const treeWalker = document.createTreeWalker(
document.querySelector("#root"),
NodeFilter.SHOW_TEXT,
);
while (treeWalker.nextNode()) {
const node = treeWalker.currentNode;
node.data = node.data.toUpperCase();
}
Résultat
Utiliser filter
Cet exemple utilise filter pour échapper les contenus textuels. Pour tout nœud textuel, son contenu sera échappé en utilisant encodeURI() s'il est un descendant d'un élément .escape mais pas d'un élément .no-escape.
HTML
<div>
<div>
Ceci n'est pas échappé. <span class="escape">Mais ceci est échappé.</span>
</div>
<div class="escape">Ceci est échappé.</div>
<div class="no-escape">Ceci n'est pas échappé.</div>
</div>
<hr />
<div class="escape">
<div>
Ceci est échappé.
<span class="no-escape">Mais ceci n'est pas échappé.</span>
</div>
<div class="no-escape">Ceci n'est pas échappé.</div>
</div>
<hr />
<div class="no-escape">
<div>Ceci n'est pas échappé.</div>
<div class="escape">Ceci n'est pas échappé.</div>
</div>
CSS
.escape {
border: dashed;
}
.no-escape {
border: solid;
}
JavaScript
const treeWalker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_ELEMENT,
(node) =>
node.classList.contains("no-escape")
? NodeFilter.FILTER_REJECT
: node.closest(".escape")
? NodeFilter.FILTER_ACCEPT
: NodeFilter.FILTER_SKIP,
);
while (treeWalker.nextNode()) {
for (const node of treeWalker.currentNode.childNodes) {
if (node.nodeType === Node.TEXT_NODE && /\S/.test(node.data)) {
// Exclure les nœuds textuels ne contenant que des espaces
node.data = encodeURI(node.data.replace(/\s+/g, " "));
}
}
}
Résultat
Spécifications
| Specification |
|---|
| DOM> # dom-document-createtreewalker> |
Compatibilité des navigateurs
Voir aussi
- L'interface associée :
TreeWalker