Szukaj…


Chodzenie po drzewie

TreeWalker to interfejs podobny do generatora, który sprawia, że rekurencyjne filtrowanie węzłów w drzewie DOM jest łatwe i wydajne.

Poniższy kod łączy wartość wszystkich węzłów Text na stronie i wypisuje wynik.

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

Funkcja .createTreeWalker ma sygnaturę

createTreeWalker(root, whatToShow, filter, entityReferenceExpansion)
Parametr Detale
korzeń Węzeł „główny”, który jest poddrzewem, powinien zostać pokonany
whatToShow Opcjonalne, niepodpisane długie określenie, jakie typy węzłów mają być wyświetlane. Aby uzyskać więcej informacji, zobacz NodeFilter.
filtr Opcjonalne: Obiekt z metodą acceptNode w celu ustalenia, czy węzeł po przejściu testu whatToShow powinien być brany pod uwagę
entityReferenceExpansion Nieaktualne i opcjonalne, Jest to logiczna wartość logiczna wskazująca, czy podczas odrzucania elementu EntityReference całe jego poddrzewa musi zostać odrzucone w tym samym czasie.

Iterowanie po węzłach

Interfejs NodeIterator zapewnia metody iteracji nad węzłami w drzewie DOM.

Biorąc pod uwagę dokument taki jak ten:

<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>

Można sobie wyobrazić iterator, aby uzyskać elementy <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);
}

Przykład zaadaptowany z przykładu dostarczonego przez Mozilla Contributors z document.createNodeIterator() w Mozilla Developer Network, na licencji CC-by-SA 2.5 .

Spowoduje to zalogowanie:

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

Zauważ, że jest to podobne do iterface TreeWalker , ale zapewnia tylko funkcje nextNode() i previousNode() .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow