Document.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 de création Document.createTreeWalker() renvoie un nouvel objet TreeWalker.
Syntaxe
createTreeWalker(root)
createTreeWalker(root, whatToShow)
createTreeWalker(root, whatToShow, filter)
Paramètres
root-
Un
Node(noeud) 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. C'est un moyen pratique de filtrer pour certains types de noeuds. Il est par défaut0xFFFFFFFF, représentant la constanteNodeFilter.SHOW_ALL.Constante Valeur numérique Description NodeFilter.SHOW_ALL0xFFFFFFFFAffiche tous les noeuds. NodeFilter.SHOW_ATTRIBUTE0x2Affiche les noeuds Attr.NodeFilter.SHOW_CDATA_SECTION0x8Affiche les noeuds CDATASection.NodeFilter.SHOW_COMMENT0x80Affiche les noeuds Comment.NodeFilter.SHOW_DOCUMENT0x100Affiche les noeuds Document.NodeFilter.SHOW_DOCUMENT_FRAGMENT0x400Affiche les noeuds DocumentFragment.NodeFilter.SHOW_DOCUMENT_TYPE0x200Affiche les noeuds DocumentType.NodeFilter.SHOW_ELEMENT0x1Affiche les noeuds 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 noeuds ProcessingInstruction.NodeFilter.SHOW_TEXT0x4Affiche les noeuds Text.Note : Étant donné que le parent de tout noeud
Attrest toujoursnull,TreeWalker.nextNode()etTreeWalker.previousNode()ne renverront jamais un noeudAttr. Pour parcourir les noeudsAttr, 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 noeud 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 noeuds itérables :- Si la valeur retournée est
NodeFilter.FILTER_ACCEPT, ce noeud est inclus. - Si la valeur retournée est
NodeFilter.FILTER_REJECT, aucun noeud de la sous-arborescence basée sur ce noeud n'est inclus. - Si la valeur retournée est
NodeFilter.FILTER_SKIP, ce noeud 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 noeuds textuels des descendants de l'élément #root sont également parcourus malgré le fait qu'ils ne soient pas des noeuds enfants de l'élément #root.
HTML
<div id="root">
Ceci est un noeud 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
Utilisation du filtre
Cet exemple utilise un filtre pour échapper les contenus textuels. Pour tout noeud 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 noeuds 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
Chargement…
Voir aussi
- L'interface de l'objet qu'il crée :
TreeWalker.