npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

deep-tree-walker

v0.2.0

Published

Recorrer el DOM y el Shadow DOM

Downloads

101

Readme

Tree Social Media Photo by Stanislav Kondratiev on Unsplash

Deep Tree Walker

Uso

Esta herramienta se exporta en los formatos CommonJs, IFFIE, ESM. Puedes descargarlo o instalarlo a través de NPM o desde Unpkg.

Npm

npm install --save deep-tree-walker

Unpkg

import {createDeepTreeWalkerIterator} from 'https://unpkg.com/deep-tree-walker?module'

# createDeepTreeWalkerIterator()

Esta función permite recorrer por todos los elementos del DOM, examentamente igual que TreeWalker con el añadido que también accede a los elmenentos del Shadow Tree.

El recorrido de los nodos se realiza siguiendo el esquema de Busqueda en anchura (anchura-primero). Además la ejecución es perezosa; para mejorar el rendimiento; por lo que se expone un iterador para ir recorriendo el DOM según la necesidad.

Sintaxis

createTreeWalker(root, [whatToShow[, acceptNodeFilter]]);

Parámentros

  • root: Nodo raíz a partir del cual se comienza a explorar
  • whatToShow (opcional): Es un valod de tipo unsigned long que se utilizar para especesifivar el típo de nodos que se quiere recorrer (ver especificación). El valor por defecto es NodeFilter.SHOW_ELEMENT
  • acceptNodeFilter (opcional): Función que evalua si un nodo es valido; en caso de válido se aplicará la regla de whatToShow para ser evaluado. En caso de ser válido; el nodo será devuelto en la siguiente iteración. Esta función deve devolver una de las constantes:
    • NodeFilter.FILTER_ACCEPT : En caso de ser válido
    • NodeFilter.FILTER_SKIP : En caso de ser inválido

Valor devuelto

Devuelve un nuevo objeto iterador

Ejemplo

<div id="box">
  <my-component><my-component> <!-- CustomElement con ShadowDom -->
  <a href="#">link</a>
</div>
<script type="module">
  import {createDeepTreeWalkerIterator} from 'deep-tree-walker-iterator';

  let gen;
  const root = document.querySelector('#box');
  // Uso básico
  gen = createDeepTreeWalkerIterator(root);
  console.group('Uso básico');
  console.log(gen.next().value); // <my-component><my-component>
  console.log(gen.next().value); // <a href="#"></a>
  console.log(gen.next().value); // undefined
  console.groupEnd();

  // filtrando por el tipo de nodo
  gen = createDeepTreeWalkerIterator(root, NodeFilter.SHOW_COMMENT);
  console.group('filtrando por el tipo de nodo');
  console.log(gen.next().value); // <!-- CustomElement con ShadowDom -->
  console.log(gen.next().value); // undefined
  console.groupEnd();

  // filtrando usando una función propia
  gen = createDeepTreeWalkerIterator(root, NodeFilter.SHOW_ELEMENT, (node) => 
      node.tagName === 'A' ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP);
  console.group('filtrando usando una función propia');
  console.log(gen.next().value); // <a href="#"></a>
  console.log(gen.next().value); // undefined
  console.groupEnd();
</script>

Enlaces de Interes