es.hideout-lastation.com
Paraíso Para Los Diseñadores Y Desarrolladores


Cómo filtrar y recorrer el árbol DOM con JavaScript

¿Sabías que hay una API de JavaScript cuya única misión es filtrar e iterar a través de los nodos que queremos desde un árbol DOM? De hecho, no uno, sino que hay dos de tales API: NodeIterator y TreeWalker . Son bastante similares entre sí, con algunas diferencias útiles. Ambos pueden devolver una lista de nodos que están presentes en un nodo raíz determinado al tiempo que cumplen con las reglas de filtro predefinidas y / o personalizadas que se les aplican.

Los filtros predefinidos disponibles en las API nos pueden ayudar a apuntar a diferentes tipos de nodos, como nodos de texto o nodos de elementos, y los filtros personalizados (añadidos por nosotros) pueden filtrar aún más el grupo, por ejemplo, buscando nodos con contenido específico. La lista de nodos devueltos es iterable, es decir, se pueden enlazar y podemos trabajar con todos los nodos individuales de la lista.

Cómo usar la API NodeIterator

Se puede crear un objeto NodeIterator utilizando el método createNodeIterator() de la interfaz del document . Este método toma tres argumentos . El primero es obligatorio; es el nodo raíz que contiene todos los nodos que queremos filtrar.

El segundo y tercer argumentos son opcionales . Son los filtros predefinidos y personalizados, respectivamente. Los filtros predefinidos están disponibles para usar como constantes del objeto NodeFilter .

Por ejemplo, si la constante NodeFilter.SHOW_TEXT se agrega como el segundo parámetro, devolverá un iterador para una lista de todos los nodos de texto debajo del nodo raíz . NodeFilter.SHOW_ELEMENT devolverá solo los nodos de elemento . Vea una lista completa de todas las constantes disponibles .

El tercer argumento (el filtro personalizado) es una función que implementa el filtro .

Aquí hay un fragmento de código de ejemplo :

 Documento 

título

esta es la envoltura de la página

Hola

¿Cómo estás?

txt
derechos de autor

Suponiendo que queremos extraer el contenido de todos los nodos de texto que están dentro del div #wrapper, así es como lo hacemos con NodeIterator :

 var div = document.querySelector ('# wrapper'); var nodeIterator = document.createNodeIterator (div, NodeFilter.SHOW_TEXT); while (nodeIterator.nextNode ()) {console.log (nodeIterator.referenceNode.nodeValue.trim ()); } / * salida de consola [Log] esta es la envoltura de la página [Log] Hello [Log] [Log] ¿Cómo estás? [Iniciar sesión] */ 

El método nextNode() de la API NodeIterator devuelve el siguiente nodo en la lista de nodos de texto iterables . Cuando lo usamos en un ciclo while para acceder a cada nodo en la lista, registramos los contenidos recortados de cada nodo de texto en la consola. La propiedad referenceNode de NodeIterator devuelve el nodo al que el iterador está actualmente conectado .

Como puede ver en la salida, hay algunos nodos de texto con solo espacios vacíos para sus contenidos. Podemos evitar mostrar estos contenidos vacíos utilizando un filtro personalizado :

 var div = document.querySelector ('# wrapper'); var nodeIterator = document.createNodeIterator (div, NodeFilter.SHOW_TEXT, function (node) {return (node.nodeValue.trim ()! == "")? NodeFilter.FILTER_ACCEPT: NodeFilter.FILTER_REJECT;}); while (nodeIterator.nextNode ()) {console.log (nodeIterator.referenceNode.nodeValue.trim ()); } / * salida de consola [Log] esta es la envoltura de la página [Log] Hello [Log] ¿Cómo estás? * / 

La función de filtro personalizado devuelve la constante NodeFilter.FILTER_ACCEPT si el nodo de texto no está vacío, lo que lleva a la inclusión de ese nodo en la lista de nodos sobre los que iterará el iterador. Contrariamente, se NodeFilter.FILTER_REJECT constante NodeFilter.FILTER_REJECT para excluir los nodos de texto vacíos de la lista de nodos iterable.

Cómo usar la API TreeWalker

Como mencioné anteriormente, las API NodeIterator y TreeWalker son similares entre sí .

TreeWalker se puede crear utilizando el método createTreeWalker() de la interfaz del document . Este método, al igual que createNodeFilter(), toma tres argumentos : el nodo raíz, un filtro predefinido y un filtro personalizado .

Si utilizamos la API TreeWalker lugar de NodeIterator el fragmento de código anterior tiene el siguiente aspecto:

 var div = document.querySelector ('# wrapper'); var treeWalker = document.createTreeWalker (div, NodeFilter.SHOW_TEXT, function (node) {return (node.nodeValue.trim ()! == "")? NodeFilter.FILTER_ACCEPT: NodeFilter.FILTER_REJECT;}); while (treeWalker.nextNode ()) {console.log (treeWalker.currentNode.nodeValue.trim ()); } / * output [Log] este es el contenedor de la página [Log] Hello [Log] ¿Cómo estás? * / 

En lugar de referenceNode, la propiedad currentNode de TreeWalker API se usa para acceder al nodo al que el iterador está conectado actualmente . Además del método nextNode(), Treewalker tiene otros métodos útiles. El método previousNode() (también presente en NodeIterator ) devuelve el nodo anterior del nodo en el que el iterador está actualmente anclado.

Funcionalidad similar es realizada por los parentNode(), firstChild(), lastChild(), previousSibling() y nextSibling() . Estos métodos solo están disponibles en la API de TreeWalker .

Aquí hay un ejemplo de código que genera el último hijo del nodo al que está anclado el iterador:

 var div = document.querySelector ('# wrapper'); var treeWalker = document.createTreeWalker (div, NodeFilter.SHOW_ELEMENT); console.log (treeWalker.lastChild ()); / * salida [Log] 

¿Cómo estás?

* /

Qué API elegir

Elija la API NodeIterator, cuando necesita simplemente un iterador simple para filtrar y recorrer los nodos seleccionados. Y, elija la API TreeWalker, cuando necesite acceder a la familia de nodos filtrados, como sus hermanos inmediatos.

Consejo de escritura: Cómo encontrar el tema correcto

Consejo de escritura: Cómo encontrar el tema correcto

No hace falta ser un súper detective para darse cuenta de que escribir no es tan difícil como parece. Sin embargo, pensar en qué escribir es una historia completamente diferente. Dos factores entran en juego al elegir el tipo de escritura que hará regularmente: ¿Qué puede hacer y qué quiere lograr?¿Eres

(Consejos de tecnología y diseño)

38 hermosos fondos de pantalla de dibujos animados para su escritorio

38 hermosos fondos de pantalla de dibujos animados para su escritorio

Una de las características más amigables para el hombre para el sistema operativo como Windows es probablemente su capacidad para cambiar la imagen que se muestra en la pantalla del escritorio, también conocido como Desktop Wallpaper. Puede ser la foto de tu amiga o una ilustración tipográfica profesional, pero si eres como yo y prefieres un entorno informático más relajante, ¡los fondos de pantalla animados son probablemente para ti!No, no

(Consejos de tecnología y diseño)