/
202.txt
117 lines (89 loc) · 5.33 KB
/
202.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
[7] [DFN[[CODE(DOMi)@en[[[NodeIterator]]]]]] [[オブジェクト]]は、
[[DOM木]]上の[[節点]]を[[木順]]または[[逆木順]]に[[探索]]する[[イテレーター]]です。
* 仕様書
[REFS[
- [6] [CITE@en-US[DOM Standard]] ([TIME[2014-06-23 14:49:32 +09:00]] 版) <http://dom.spec.whatwg.org/#nodeiterator>
]REFS]
* 文脈
[16] [CODE(DOMi)@en[[[NodeIterator]]]] は[[文書環境]]に(のみ)[[晒され]]ます。
[20] [CODE(DOMi)@en[[[NodeIterator]]]] は [CODE(DOMm)@en[[[createNodeIterator]]]]
[[メソッド]]により作成することができます。[[コンストラクター]]から作成することはできません。
* メンバー
[13] [CODE(DOMi)@en[[[NodeIterator]]]] [[オブジェクト]]は次のものを持ちます。
[FIG(list short)[
- [[根]]
- [[イテレーターコレクション]] (>>8)
- [[whatToShow]]
- [[フィルター]]
- [[参照節点]]
- [CODE(DOMa)@en[[[pointerBeforeReferenceNode]]]]
]FIG]
;; [14] [[根]]、[[whatToShow]]、[[フィルター]]、
[[イテレーターコレクション]]自身は[[オブジェクト]]の作成の時点で決定され、
変化しません。それ以外のものや、[[イテレーターコレクション]]が表すものは変化することがあります。
[15] [CODE(DOMi)@en[[[NodeIterator]]]] [[オブジェクト]]は次の[[メソッド]]と[[IDL属性]]を持ちます
[SRC[>>6]]。
[FIG(list short)[
- [CODE(DOMm)@en[[[detach]]]]
- [CODE(DOMa)@en[[[filter]]]]
- [CODE(DOMm)@en[[[nextNode]]]]
- [CODE(DOMa)@en[[[pointerBeforeReferenceNode]]]]
- [CODE(DOMm)@en[[[previousNode]]]]
- [CODE(DOMa)@en[[[referenceNode]]]]
- [CODE(DOMa)@en[[[root]]]]
- [CODE(DOMa)@en[[[whatToShow]]]]
]FIG]
* イテレーターコレクション
[8] [CODE(DOMi)@en[[[NodeIterator]]]] の動作は、
仕様書上[DFN[[RUBYB[[[イテレーターコレクション]]]@en[iterator collection]]]]
[SRC[>>6]] によって説明されています。必ずしもこの通りに実装しなければならないわけではありませんが、
[[スクリプト]]から区別できない同等な動作を実装しなければなりません。
[9] [[イテレーターコレクション]]は、 [CODE(DOMi)@en[[[NodeIterator]]]]
の[[根]]を[[根]]とし、すべての[[節点]]と[[一致]]する[[フィルター]]を持つ[[コレクション]]です
[SRC[>>6]]。この[[コレクション]]は [[live]] です。[[コレクション]]内の[[節点]]は[[木順]]で[[整列]]しています。
[FIG(corollary)[
[18] [[イテレーターコレクション]]の[[フィルター]]は、[CODE(DOMi)@en[[[NodeIterator]]]]
の[[フィルター]]とは異なります。
]FIG]
[FIG(corollary)[
[19] 他の多くの[[コレクション]]とは違って、[[要素]]以外の[[節点]]が含まれることもあります。
]FIG]
[FIG(corollary)[
[17] [[根]]も[[コレクション]]内に含まれます。
]FIG]
[10] [CODE(DOMm)@en[[[previousNode]]]], [CODE(DOMm)@en[[[nextNode]]]]
両[[メソッド]]は、[[イテレーターコレクション]]上で[[参照節点]]の前後にある[[節点]]へと[[参照節点]]を移動し、
新しい[[参照節点]]を返す[[メソッド]]と説明されています。
;; この時には [CODE(DOMi)@en[[[NodeIterator]]]] の[[フィルター]]と
[CODE(DOMa)@en[[[whatToShow]]]] が適用されるので、
[[イテレーターコレクション]]上の2つ以上前後の[[節点]]に移動するかもしれません。
[11] [[参照節点]]が削除されて[[根]]の[[部分木]]からなくなった場合には、
[[イテレーターコレクション]]上の前後 ([CODE(DOMa)@en[[[pointerBeforeReferenceNode]]]]
が[[真]]なら前、[[偽]]なら後) の[[節点]]へと[[参照節点]]が移動します。
[FIG(corollary)[
[12] [[イテレーターコレクション]]は [[live]] ですから、 [[DOM木]]の変更が即座に反映されます。
従って、[[DOM木]]からの削除は即座に[[参照節点]]を変更させることとなります。
]FIG]
[FIG(corollary)[
[21] [CODE(DOMi)@en[[[NodeIterator]]]] は、[[根]]が属する[[文書]]に所属するものと考えることもできます。
その場合、[[根]]が [[adopt]] されて所属する[[文書]]が変わることがあります。
]FIG]
* 歴史
[5] [CITE[Index of /tests/adhoc/dom/traversal/node-iterator]]
( ([TIME[2014-07-23 09:08:25 +09:00]] 版))
<http://hixie.ch/tests/adhoc/dom/traversal/node-iterator/>
[FIG(quote)[
[FIGCAPTION[
[1] [CITE@en-us[Firefox 3.1 for developers - MDC]] ([TIME[2009-02-08 18:25:06 +09:00]] 版) <https://developer.mozilla.org/ja/Firefox_3.1_for_developers#.E6.96.B0.E3.81.97.E3.81.8F.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.81.95.E3.82.8C.E3.81.9F.E6.A9.9F.E8.83.BD_2>
]FIGCAPTION]
>NodeIterator オブジェクト API
]FIG]
[4] [CITE[Bug 3492 – TreeWalker implementation needs to be fixed (affects Acid3)]]
( ([TIME[2014-07-23 09:08:04 +09:00]] 版))
<https://bugs.webkit.org/show_bug.cgi?id=3492>
* メモ
[2] [CITE[Introduction to DOM Traversal - DOM ECMAScripting]]
( ([TIME[2012-02-19 11:54:27 +09:00]] 版))
<http://domes.lingua.heliohost.org/dom/intro-traversal1.html>
[3] [[NodeIterator]] って誰が使ってるんだろう???? ぐぐってもでてくるのは [[javadoc]]
ばかりだし・・・。 [TIME[2014-07-23T09:05:34.800Z]]