TreeWalker#
TreeWalker.currentNode#
Właściwość currentNode
zwraca lub ustawia bieżący węzeł w danym przemierzaczu drzewa.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
var current_node = treeWalker.currentNode; // getting treeWalker.currentNode = new_node; // setting
gdzie poszczególne człony oznaczają:
- current_node - bieżący węzeł.
- treeWalker - przemierzacz drzewa będący obiektem kontekstu.
- new_node - nowy węzeł zastępujący poprzedni bieżący węzeł.
Bieżącym węzłem jest węzeł, który został wybrany jako ostatni w czasie przechodzenia po przemierzaczu drzewa. W przypadku tworzenia przemierzacza domyślnie staje się nim korzeń przekazany do metody Document.createTreeWalker()
. Jeśli przejście do kolejnego węzła przy użyciu dedykowanych metod nie jest możliwe, to bieżący węzeł nie ulega zmianie.
Samodzielna zmiana bieżącego węzła powoduje, że nowy bieżący węzeł nie podlega regułom filtracyjnym pochodzącym z maski bitowej i dodatkowej funkcji filtrującej. Jeśli filtracja wyklucza nam np. elementy to i tak możliwe jest ustawienie bieżącego węzła na jakiś element.
Bezpośrednia zmiana bieżącego węzła może też w łatwy sposób doprowadzić do sytuacji, w której bieżącym węzłem będzie węzeł znajdujący się poza oryginalnym drzewem węzłów w korzeniu przemierzacza. Taka sytuacja umożliwia wybieranie kolejnych węzłów, które znajdują się poza wspomnianym korzeniem. Więcej na ten temat napisałem przy omawianiu właściwości TreeWalker.root
.
Prosty przykład:
<div id="box">
<p>Pierwszy akapit.</p>
<P>Drugi akapit.</p>
<P>Trzeci akapit.</P>
</div>
<div id="box2">
</div>
<script>
var root = document.getElementById("box");
var new_node = document.getElementById("box2")
// Tworzymy nowego przemierzacza drzewa (filtr jest domyślny)
var walker = document.createTreeWalker(root, NodeFilter.SHOW_ALL);
document.write(walker.root); // [object HTMLDivElement]
document.write("<br>");
document.write(walker.root.id); // box
document.write("<br>");
document.write(walker.currentNode); // [object HTMLDivElement]
document.write("<br><br>");
// Bezpośrednio ustawiamy bieżący węzeł w przemierzaczu na pierwszy akapit w korzeniu 'root'
document.write(walker.currentNode = root.firstElementChild); // [object HTMLParagraphElement]
document.write("<br>");
document.write(walker.currentNode.textContent); // Pierwszy akapit.
document.write("<br><br>");
// Bezpośrednio ustawiamy bieżący węzeł w przemierzaczu na blok div (id="box2") poza korzeniem 'root'
document.write(walker.currentNode = new_node); // [object HTMLDivElement]
document.write("<br>");
document.write(walker.currentNode.id); // box2
</script>
Składnia Web IDL#
interface TreeWalker { attribute Node currentNode; }