NodeIterator#
NodeIterator.detach()#
Metoda detach()
nie robi niczego sensownego. Pozostawiono ją w celu zachowania kompatybilności ze starszymi implementacjami.
Opis działania#
Samo wywołanie i poszczególne jego części najlepiej objaśnić na zapisie składniowym:
nodeIterator.detach();
gdzie poszczególne człony oznaczają:
- nodeIterator - iterator węzłowy będący obiektem kontekstu.
Algorytm wywołania metody detach()
nie jest skomplikowany. Dla lepszego zrozumienia tematu prezentuję go w całości:
- Nie rób niczego.
Prosty przykład:
<script>
// Tworzymy nowego iteratora węzłowego
var iterator = document.createNodeIterator(document);
document.write(iterator.root); // [object HTMLDocument]
document.write("<br>");
document.write(iterator.referenceNode); // [object HTMLDocument]
document.write("<br><br>");
iterator.detach(); // odłączamy iteratora węzłowego
document.write(iterator.root); // [object HTMLDocument]
document.write("<br>");
document.write(iterator.referenceNode); // [object HTMLDocument] Firefox i Chrome, null dla pozostałych przeglądarek
document.write("<br>");
document.write(iterator.nextNode()); // [object HTMLDocument] Firefox i Chrome, wyjątek InvalidStateError dla pozostałych przeglądarek
</script>
Na chwilę obecną jedynie przeglądarki Firefox i Chrome obsługują metodę detach()
zgodnie z najnowszymi wymaganiami specyfikacji DOM4.
W przypadku pozostałych programów metoda całkowicie odłącza (dezaktywuje) dany iterator węzłowy, co jest prawidłowe względem poprzedniego standardu. Wszystkie zasoby związane z iteratorem zostają zwolnione, właściwość NodeIterator.referenceNode
ustawiona zostaje na wartość null
, i nie można wywoływać na nim żadnych metod (zgłoszony zostanie wyjątek "InvalidStateError"
), chociaż odczyt ostatnich właściwości z iteratora wciąż jest możliwy. Ponowna aktywacja iteratora, czyli połączenie iteratora z zestawem iteracji nie jest już możliwe, należy utworzyć nowy obiekt.
Składnia Web IDL#
interface NodeIterator { void detach(); }