nl.hideout-lastation.com
Paradijs Voor Ontwerpers En Ontwikkelaars


Hoe te filteren en de DOM-boom met JavaScript doorkruisen

Wist u dat er een JavaScript-API bestaat waarvan de enige missie is om uit te filteren en te herhalen via de knooppunten die we van een DOM-structuur willen? In feite zijn er niet één, maar er zijn twee van dergelijke API's: NodeIterator en TreeWalker . Ze lijken erg op elkaar, met enkele bruikbare verschillen. Beiden kunnen een lijst met knooppunten die aanwezig zijn onder een bepaald wortelknooppunt retourneren terwijl ze voldoen aan vooraf ingestelde en / of aangepaste filterregels die op hen zijn toegepast.

De vooraf gedefinieerde filters die beschikbaar zijn in de API's kunnen ons helpen verschillende soorten knooppunten, zoals tekstknooppunten of elementknooppunten, te targeten, en aangepaste filters (door ons toegevoegd) kunnen de groep verder filteren, bijvoorbeeld door te zoeken naar knooppunten met specifieke inhoud. De geretourneerde lijst met knooppunten is iterabel, dat wil zeggen dat ze kunnen worden doorgelust en we kunnen werken met alle afzonderlijke knooppunten in de lijst.

Hoe de NodeIterator API te gebruiken

Een NodeIterator object kan worden gemaakt met de methode createNodeIterator() van de document . Deze methode neemt drie argumenten . De eerste is vereist; het is het basisknooppunt dat alle knooppunten bevat die we willen filteren.

Het tweede en derde argument zijn optioneel . Dit zijn de vooraf gedefinieerde en aangepaste filters, respectievelijk. De vooraf gedefinieerde filters zijn beschikbaar voor gebruik als constanten van het NodeFilter object .

Als de constante NodeFilter.SHOW_TEXT wordt toegevoegd als de tweede parameter, wordt bijvoorbeeld een iterator geretourneerd voor een lijst met alle NodeFilter.SHOW_TEXT onder het basisknooppunt . NodeFilter.SHOW_ELEMENT retourneert alleen de elementknooppunten . Bekijk een volledige lijst met alle beschikbare constanten .

Het derde argument (het aangepaste filter) is een functie die het filter implementeert .

Hier is een voorbeeld van een codefragment :

 Document 

titel

dit is de paginavuller

Hallo

Hoe gaat het met je?

txt
auteursrechten

Ervan uitgaande dat we de inhoud van alle #wrapper in de #wrapper div willen extraheren, doen we dit met NodeIterator :

 var div = document.querySelector ('# wrapper'); var nodeIterator = document.createNodeIterator (div, NodeFilter.SHOW_TEXT); while (nodeIterator.nextNode ()) {console.log (nodeIterator.referenceNode.nodeValue.trim ()); } / * console-uitvoer [Logboek] dit is de pagina-omslag [Logboek] Hallo [Log] [Logboek] Hoe gaat het? [Log] * / 

De methode nextNode() van de NodeIterator API retourneert het volgende knooppunt in de lijst met itereerbare tekstknooppunten . Wanneer we het in een while lus gebruiken om toegang te krijgen tot elk knooppunt in de lijst, loggen we de ingekorte inhoud van elk tekstknooppunt in de console. De eigenschap referenceNode van NodeIterator retourneert het knooppunt NodeIterator de iterator momenteel is gekoppeld .

Zoals je kunt zien in de uitvoer, zijn er enkele tekstknooppunten met alleen lege spaties voor hun inhoud. We kunnen voorkomen dat deze lege inhoud wordt weergegeven met behulp van een aangepast filter :

 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 ()); } / * console-uitvoer [Logboek] dit is de pagina-omslag [Logboek] Hallo [Logboek] Hoe gaat het? * / 

De aangepaste filterfunctie retourneert de constante NodeFilter.FILTER_ACCEPT als het NodeFilter.FILTER_ACCEPT niet leeg is, wat leidt tot de opname van dat knooppunt in de lijst met knooppunten waarop de iterator wordt herhaald. In tegendeel, de constante NodeFilter.FILTER_REJECT wordt geretourneerd om de lege tekstknooppunten uit te sluiten van de iterabele lijst met knooppunten.

Hoe de TreeWalker API te gebruiken

Zoals ik eerder al zei, zijn de API's NodeIterator en TreeWalker vergelijkbaar met elkaar .

TreeWalker kan worden gemaakt met de methode createTreeWalker() van de document . Deze methode neemt, net als createNodeFilter(), drie argumenten : het basisknooppunt, een vooraf gedefinieerd filter en een aangepast filter .

Als we de TreeWalker API gebruiken in plaats van NodeIterator het vorige codefragment er als volgt uit:

 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 ()); } / * uitvoer [Logboek] dit is de paginaomslag [Logboek] Hallo [Logboek] Hoe gaat het? * / 

In plaats van referenceNode wordt de currentNode eigenschap van de TreeWalker API gebruikt om toegang te krijgen tot het knooppunt waaraan de iterator momenteel is gekoppeld . Naast de methode nextNode() heeft Treewalker nog andere handige methoden. De methode previousNode() (ook aanwezig in NodeIterator ) retourneert het vorige knooppunt van het knooppunt waarop de iterator momenteel is verankerd.

Soortgelijke functionaliteit wordt uitgevoerd door de parentNode(), firstChild(), lastChild(), previousSibling() en nextSibling() . Deze methoden zijn alleen beschikbaar in de TreeWalker API .

Hier is een codevoorbeeld dat het laatste kind van het knooppunt uitvoert waarop de iterator is verankerd:

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

Hoe gaat het met je?

* /

Welke API te kiezen

Kies de NodeIterator API, wanneer u slechts een eenvoudige iterator nodig hebt om de geselecteerde knooppunten te filteren en door te lussen. En kies de TreeWalker API als u toegang moet hebben tot de familie van de gefilterde knooppunten, zoals hun directe broers of zussen.

19 Google Apps Scripts voor Pro Gmail-gebruikers

19 Google Apps Scripts voor Pro Gmail-gebruikers

Met Google Apps Scripts kunt u dingen op het Google-platform doen die anders onmogelijk zouden zijn zonder grote hoeveelheden code te hoeven schrijven . Het is een eenvoudige, beginnersvriendelijke, JS-achtige taal die in de cloud wordt uitgevoerd en waarmee u Google-services kunt coderen, scripten en automatiseren

(Technische en ontwerptips)

5 geheimen van medeoprichter Worthy

5 geheimen van medeoprichter Worthy

Terwijl 99% van de mensen nog steeds hun cv indient, zijn er de 0, 01% die door startups constant worden benaderd met miljoenen geld. Waarom gebeurt dit? Gewoon omdat ze de titanen zijn van de startup-industrie.Ik heb onlangs bijvoorbeeld geleerd dat ze in mijn vorige baan iemand $ 10k per maand betalen voor 'parttime werken'

(Technische en ontwerptips)