/
202.txt
142 lines (106 loc) · 6.81 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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
[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 middle members)[ [CODE[NodeIterator]] の状態
: [[根]] :
: [[イテレーターコレクション]] : >>8
: [[whatToShow]] :
: [[フィルター]] :
: [[参照節点]] :
: [CODE(DOMa)@en[[[pointerBeforeReferenceNode]]]] :
: [F[活性フラグ]] :
]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]]
[22] [CITE@en[Fix NodeIterator removing step · whatwg/dom@c97daed]] ([TIME[2015-05-30 23:58:41 +09:00]] 版) <https://github.com/whatwg/dom/commit/c97daedbe0da3b4e59d103226af74bb5a4231460>
[23] [CITE@en[Fix NodeIterator removing step. Closes #27 · whatwg/dom@248d4fe]] ([TIME[2015-05-30 23:59:10 +09:00]] 版) <https://github.com/whatwg/dom/commit/248d4fe2732ef4e37b186127948c0c50b2c9259b>
[24] [CITE@en[Editorial: flip non-null/otherwise conditions · whatwg/dom@8d281a3]]
([TIME[2016-04-22 18:21:58 +09:00]] 版)
<https://github.com/whatwg/dom/commit/8d281a354690abfda5ff558c461747f304f11788>
[25] ある部分木の[[節点]]を順番に[[訪問]]して、[[テキスト]]を拾いつつ特定の[[要素]]の前後に区切り文字を入れたものを得たい、
みたいなありがちなシチュエーションで、
使えそうで使えないんですよねぇ... ([[親]] → [[子]]の順またはその逆順のどちらかなので、
子孫の後に区切りを挟む、というのができない。)
[26] [CITE@en[Reinstate active flag for iterators]]
([[ayg]]著, [TIME[2017-08-08 16:07:39 +09:00]])
<https://github.com/whatwg/dom/commit/6a796cc7676263c30550abfd7cc248300d006b2d>
[27] [CITE@en[Also unset the active flag when an exception is thrown]]
([[annevk]]著, [TIME[2017-08-25 00:17:53 +09:00]])
<https://github.com/whatwg/dom/commit/48c4b4aa0d1b4044b7be62d3a75aaab94058161f>