Buscar..


Árbol caminando

TreeWalker es una interfaz similar a un generador que hace que el filtrado recursivo de nodos en un árbol DOM sea fácil y eficiente.

El siguiente código concatena el valor de todos los nodos de Text en la página e imprime el resultado.

let parentNode = document.body;
let treeWalker = document.createTreeWalker(parentNode, NodeFilter.SHOW_TEXT);

let text = "";
while (treeWalker.nextNode())
    text += treeWalker.currentNode.nodeValue;

console.log(text); // all text in the page, concatenated

La función .createTreeWalker tiene una firma de

createTreeWalker(root, whatToShow, filter, entityReferenceExpansion)
Parámetro Detalles
raíz El nodo 'raíz' cuyo subárbol debe ser recorrido
que hacer Opcional, sin signo largo que designa qué tipos de nodos mostrar. Ver NodeFilter para más información.
filtrar Opcional, un objeto con un método acceptNode para determinar si un nodo, después de pasar la comprobación de whatToShow debe considerarse
entityReferenceExpansion Obsoleto y opcional, es una bandera booleana que indica si al descartar una EntityReference todo su subárbol debe descartarse al mismo tiempo.

Iterando sobre nodos

La interfaz NodeIterator proporciona métodos para iterar sobre nodos en un árbol DOM.

Dado un documento como este:

<html>
<body>
  <section class="main">
    <ul>
      <li>List Item</li>
      <li>List Item</li>
      <li>List Item</li>
      <li>List Item</li>
    </ul>
  </section>
</body>
</html>

Uno podría imaginar un iterador para obtener los elementos <li> :

let root = document.body;
let whatToShow = NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT;
let filter = (node) => node.nodeName.toLowerCase() === 'li' ? 
  NodeFilter.FILTER_ACCEPT : 
  NodeFilter.FILTER_REJECT;
let iterator = document.createNodeIterator(root, whatToShow, filter);
var node;
while (node = iterator.nextNode()) {
  console.log(node);
}

Ejemplo adaptado del ejemplo proporcionado por los Colaboradores de Mozilla de la document.createNodeIterator() en la Red de Desarrolladores de Mozilla, con licencia CC-by-SA 2.5 .

Esto registrará algo como:

<li>List Item</li>
<li>List Item</li>
<li>List Item</li>
<li>List Item</li>

Tenga en cuenta que esto es similar a la interfaz de árbol de TreeWalker, pero proporciona solo las nextNode() y previousNode() .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow