Comment filtrer et traverser l'arborescence DOM avec JavaScript
Saviez-vous qu'il existe une API JavaScript dont la seule mission est de filtrer et de parcourir les nœuds que nous voulons depuis un arbre DOM? En fait, pas un, mais il existe deux API de ce type: NodeIterator
et TreeWalker
. Ils sont assez similaires les uns aux autres, avec quelques différences utiles. Les deux peuvent renvoyer une liste de noeuds présents sous un noeud racine donné tout en respectant les règles de filtre prédéfinies et / ou personnalisées qui leur sont appliquées.
Les filtres prédéfinis disponibles dans les API peuvent nous aider à cibler différents types de nœuds tels que des nœuds de texte ou des nœuds d'éléments, et des filtres personnalisés (ajoutés par nous) peuvent filtrer davantage le paquet, par exemple en recherchant des nœuds avec des contenus spécifiques. La liste des nœuds renvoyés est itérable, c'est-à-dire qu'ils peuvent être bouclés, et nous pouvons travailler avec tous les nœuds individuels de la liste.
Comment utiliser l'API NodeIterator
Un objet NodeIterator
peut être créé à l'aide de la méthode createNodeIterator()
de l'interface de document
. Cette méthode prend trois arguments . Le premier est requis; C'est le nœud racine qui contient tous les nœuds que nous voulons filtrer.
Les deuxième et troisième arguments sont facultatifs . Ce sont les filtres prédéfinis et personnalisés, respectivement. Les filtres prédéfinis sont disponibles pour utilisation en tant que constantes de l'objet NodeFilter
.
Par exemple, si la constante NodeFilter.SHOW_TEXT
est ajoutée en tant que deuxième paramètre, elle renvoie un itérateur pour une liste de tous les nœuds de texte sous le nœud racine . NodeFilter.SHOW_ELEMENT
ne retournera que les nœuds de l'élément . Voir la liste complète de toutes les constantes disponibles .
Le troisième argument (le filtre personnalisé) est une fonction qui implémente le filtre .
Voici un exemple d'extrait de code :
Document Titre
c'est l'enveloppe de la pagetxtBonjour
Comment allez-vous?
En supposant que nous voulions extraire le contenu de tous les nœuds de texte qui sont à l'intérieur de la div #wrapper
, #wrapper
comment nous NodeIterator
utilisant NodeIterator
:
var div = document.querySelector ('# wrapper'); var nodeIterator = document.createNodeIterator (div, NodeFilter.SHOW_TEXT); while (nodeIterator.nextNode ()) {console.log (nodeIterator.referenceNode.nodeValue.trim ()); } / * console sortie [Log] ceci est l'encapsuleur [Log] Bonjour [Log] [Log] Comment allez-vous? [Log] * /
La méthode nextNode()
de l'API NodeIterator
renvoie le nœud suivant dans la liste des nœuds de texte itérables . Lorsque nous l'utilisons dans une boucle while pour accéder à chaque noeud de la liste, nous enregistrons le contenu découpé de chaque noeud de texte dans la console. La propriété referenceNode
de NodeIterator
renvoie le nœud NodeIterator
l'itérateur est actuellement attaché .
Comme vous pouvez le voir dans la sortie, il y a des nœuds de texte avec juste des espaces vides pour leur contenu. Nous pouvons éviter d'afficher ces contenus vides en utilisant un filtre personnalisé :
var div = document.querySelector ('# wrapper'); var nodeIterator = document.createNodeIterator (div, NodeFilter.SHOW_TEXT, fonction (noeud) {return (node.nodeValue.trim ()! == "")? NodeFilter.FILTER_ACCEPT: NodeFilter.FILTER_REJECT;}); while (nodeIterator.nextNode ()) {console.log (nodeIterator.referenceNode.nodeValue.trim ()); } / * console sortie [Log] ceci est l'encapsuleur [Log] Bonjour [Log] Comment allez-vous? * /
La fonction de filtre personnalisé renvoie la constante NodeFilter.FILTER_ACCEPT
si le nœud de texte n'est pas vide, ce qui entraîne l'inclusion de ce nœud dans la liste des nœuds que l'itérateur parcourt. À l' NodeFilter.FILTER_REJECT
, la constante NodeFilter.FILTER_REJECT
est renvoyée afin d' exclure les nœuds de texte vides de la liste itérative des nœuds.
Comment utiliser l'API TreeWalker
Comme je l'ai mentionné précédemment, les API NodeIterator
et TreeWalker
sont similaires les unes aux autres .
TreeWalker
peut être créé à l'aide de la méthode createTreeWalker()
de l'interface de document
. Cette méthode, tout comme createNodeFilter()
, prend trois arguments : le nœud racine, un filtre prédéfini et un filtre personnalisé .
Si nous utilisons l'API TreeWalker
au lieu de NodeIterator
l'extrait de code précédent ressemble à ceci:
var div = document.querySelector ('# wrapper'); var treeWalker = document.createTreeWalker (div, NodeFilter.SHOW_TEXT, fonction (noeud) {return (node.nodeValue.trim ()! == "")? NodeFilter.FILTER_ACCEPT: NodeFilter.FILTER_REJECT;}); while (treeWalker.nextNode ()) {console.log (treeWalker.currentNode.nodeValue.trim ()); } / * output [Log] c'est le wrapper de page [Log] Bonjour [Log] Comment ça va? * /
Au lieu de referenceNode
, la propriété currentNode
de l'API TreeWalker
est utilisée pour accéder au nœud auquel l'itérateur est actuellement attaché . En plus de la méthode nextNode()
, Treewalker
a d'autres méthodes utiles. La méthode previousNode()
(également présente dans NodeIterator
) renvoie le nœud précédent du nœud sur NodeIterator
l'itérateur est actuellement ancré.
Une fonctionnalité similaire est effectuée par les parentNode()
, firstChild()
, lastChild()
, previousSibling()
et nextSibling()
. Ces méthodes sont uniquement disponibles dans l'API TreeWalker
.
Voici un exemple de code qui génère le dernier enfant du nœud sur lequel l'itérateur est ancré:
var div = document.querySelector ('# wrapper'); var treeWalker = document.createTreeWalker (div, NodeFilter.SHOW_ELEMENT); console.log (treeWalker.lastChild ()); / * sortie [Log]Comment allez-vous?
* /
Quelle API choisir
Choisissez l'API NodeIterator
, lorsque vous n'avez besoin que d'un simple itérateur pour filtrer et parcourir les nœuds sélectionnés. Et, choisissez l'API TreeWalker
, lorsque vous avez besoin d'accéder à la famille des nœuds filtrés, tels que leurs frères et sœurs immédiatement.

200 meilleurs pinceaux Photoshop gratuits à télécharger
Les pinceaux sont l'un des meilleurs et des plus utilisés des outils Photoshop que les concepteurs adorent utiliser pour enrichir leurs créations . Ils vous aident non seulement à gagner du temps et des efforts pour créer des éléments de conception complexes, mais aussi à donner une touche créative à vos créations.Comme les

OS X Lion: 10 nouvelles fonctionnalités et raccourcis à connaître
Le dernier système d'exploitation d'Apple pour Mac, 10.7 ou mieux connu sous le nom d'OS X Lion, a été officiellement lancé le 20 juillet 2011. Mais les développeurs, y compris moi-même, en avaient déjà eu l'occasion grâce au programme Apple Developers.Selon Apple, le nouveau système d'exploitation de 29, 99 $ est livré avec plus de 250 nouvelles fonctionnalités, y compris les quelques-uns comme Mission Control, Auto Save, Launch Pad, toute nouvelle application Mail et quelques autres.Maintenant,