[4] [CODE(DOMi)@en[[[NodeIterator]]]] の[[メソッド]]である
[DFN[[CODE(DOMm)@en[[[previousNode]]]]]], [DFN[[CODE(DOMm)@en[[[nextNode]]]]]]
は、それぞれ前または後に[[探索]]を行います。

* 仕様書

[REFS[
- [3] [CITE@en-US[DOM Standard]] ([TIME[2014-06-23 14:49:32 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-nodeiterator-traverse>
]REFS]

* [CODE(DOMi)@en[NodeIterator]] における探索

[5] [CODE(DOMm)@en[[[previousNode]]]] は前方向、 [CODE(DOMm)@en[[[nextNode]]]]
は後方向に[[探索]]を行い、その結果を返さなければ[['''なりません''']] [SRC[>>3]]。
両[[メソッド]]の[[型]]は、 [CODE(DOMi)@en[[[Node]][[?]]]] です [SRC[>>3]]。

[6] [DFN[[RUBYB[[[探索]]]@en[traversal]]]]は、
[[イテレーターコレクション]]において現在の[[参照節点]]の前または後において、
[[濾過]] ([[whatToShow]] と[[濾過器]]を適用) した結果 [CODE(DOMc)@en[[[FILTER_ACCEPT]]]]
が得られる直近の[[節点]]を返します。そのような[[節点]]がなければ、 [[null]] を返します。
[SRC[>>3]]

;; [8] [[濾過器]]が[[例外]]を投げた場合には、それが伝播して [CODE(DOMm)@en[[[previousNode]]]]
や [CODE(DOMm)@en[[[nextNode]]]] も[[例外]]を投げます。

[7] [[節点]]を返す場合には、その[[節点]]が新たな[[参照節点]]として設定され、
[CODE(DOMm)@en[[[nextNode]]]] なら[[偽]]、
[CODE(DOMm)@en[[[previousNode]]]] なら[[真]]が
[CODE(DOMa)@en[[[pointerBeforeReferenceNode]]]] に設定されます。
[[null]] を返す場合や[[例外]]が投げられた場合には、いずれも変更されません。 [SRC[>>3]]

* 歴史

[1]
[[DOM水準2]]の仕様書からは [CODE(DOMi)@en[[[TreeWalker]]]]
の [CODE(DOMm)@en[[[previousNode]]]] が例えば
[CODE(DOMa)@en[[[currentNode]]]] が
[CODE(DOMa)@en[[[root]]]] なら
[CODE(DOM)@en[[[null]]]] になるのか不明瞭です
(おそらくそうなのでしょうが)。

[2] [[DOM水準2]]の仕様書からは [CODE(DOMi)@en[[[TreeWalker]]]]
の [CODE(DOMm)@en[[[nextNode]]]] がみつからないなら
[CODE(DOM)@en[[[null]]]] になるのか不明瞭です
(おそらくそうなのでしょうが)。


[9] [CITE@en[Fix TreeWalker's nextNode()]]
([[annevk]]著, [TIME[2018-04-09 22:13:58 +09:00]])
<https://github.com/whatwg/dom/commit/826d66b551935a7b2af09a4afc2b839500bb6c0e>

[10] [CITE@en[28107 – TreeWalker nextNode never ascends the tree]]
([TIME[2018-04-10 22:53:30 +09:00]])
<https://www.w3.org/Bugs/Public/show_bug.cgi?id=28107>

[11] [CITE@en[Fix TreeWalker's nextNode() by annevk · Pull Request #612 · whatwg/dom]]
([TIME[2018-04-10 22:54:41 +09:00]])
<https://github.com/whatwg/dom/pull/612>