-
Notifications
You must be signed in to change notification settings - Fork 4
/
221.txt
109 lines (83 loc) · 5.91 KB
/
221.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
[11] [[DOM木]]上の[[親節点]]と[[子節点]]の[[親子]]関係を解消することを、
[[子節点]]の[DFN[[RUBYB[[[削除]]]@en[remove]]]]といいます。
[12] [[節点]]を[[削除]]しても、[[節点]]が消滅するわけではありません。
何らかの[[参照]]が存在する限りは旧[[親節点]]も旧[[子節点]]も[[ごみ収集]]されずに存続します。
* 仕様書
[REFS[
- [7] [CITE@en-US[DOM Standard]] ([TIME[2014-06-23 14:49:32 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-node-remove>
- [1] [CITE@en-US[DOM Standard]] ([TIME[2014-08-19 13:36:28 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-node-remove-ext>
]REFS]
* 削除
[6] [[DOM Standard]] 仕様書上の操作[DFN[[RUBYB[[[削除]]]@en[remove]]]] [SRC[>>7]]
は次の箇所から呼び出されています。
[FIG(list short)[
- [[pre-insert]]
- [[replace]]
- [[replace all]]
- [[pre-remove]]
- [CODE(DOMi)@en[[[ChildNode]]]] [CODE(DOMm)@en[[[remove]]]]
- [CODE(DOMm)@en[[[adoptNode]]]]
- [[adopt]]
- [CODE(DOMm)@en[[[deleteContents]]]]
- [[範囲の挿入]]
]FIG]
[9] この操作では、[[DOM木]]上の[[親節点]]の[[子供]]のリストからの[[節点]]の[[削除]]に加えて、
関係する[[範囲]]の状態の変更や、 [CODE(DOMi)@en[[[MutationObserver]]]]
の実行の準備も行われます ([CODE(DOMi)@en[[[MutationObserver]]]] の実行そのものはこの時点ではなされません)。
[10] [[削除手順]] (>>2) も呼び出されます。
[20] [[blur]] が発生する可能性もありますが、どのタイミングかは不明です。
* 削除手順
[2] [[節点]]が他の[[節点]]の[[子供]]から[[削除]]されると、
その[[影根を含む子孫]]それぞれについて、
[[影根を含む木順]]に[RUBYB[[[削除手順]]]@en[removing steps]]
[SRC[>>1]] が呼び出されます。
;; [3] [[DOM Standard]] 上の[[アルゴリズム]]である [[replace]], [[replace all]],
[[remove]] から呼び出されます。
[4] この[[フック]]によって次の[[節点]]が何らかの処理を行います。
[FIG(list)[
- [8] 当該[[節点]]やその[[子孫]]が含まれる[[コレクション]]からの削除や、
[CODE(DOMi)@en[[[NodeIterator]]]] の[[イテレーターコレクション]]からの[[節点]]の[[削除]]に伴う[[参照節点]]の変更
[SRC[[[DOM Standard]]]]
- [CODE(HTMLe)@en[[[option]]]] [SRC[[[HTML Standard]]]]
- [[fullscreen element stack]] の[[要素]] [SRC[[[Fullscreen API Standard]]]]
- [CODE(HTMLe)@en[[[source]]]] ([[媒体要素]]) [SRC[[[HTML Standard]]]]
- [[媒体要素]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[img]]]] ([CODE(HTMLe)@en[[[picture]]]]) [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[source]]]] ([CODE(HTMLe)@en[[[picture]]]]) [SRC[[[HTML Standard]]]]
]FIG]
[5] 仕様上明確には規定されていませんが、次の動作もこの[[フック]]のタイミングで処理されると思われます。
[FIG(list)[
- [[要素の文書からの削除]] [SRC[[[HTML Standard]]]]
- [[画像写像]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[style]]]] の[[子孫]] [SRC[[[HTML Standard]]]]
- [CODE(HTMLe)@en[[[track]]]] [SRC[[[HTML Standard]]]]
- [CODE(XML)@en[[[<?xml-stylesheet?>]]]] [SRC[[[CSSOM]]]]
- [[フォーム被関連付け要素]] [SRC[[[HTML Standard]]]]
]FIG]
@@ [25] [[custom element]] の[[コールバック]]
* 歴史
[16] [[削除手順]]は、 >>15 までは[DFN[[RUBYB[[[節点の削除]]]@en[node is removed]]]]と呼ばれていました。
[18] [[HTML Standard]] では現在でも「nodes are removed」と呼ばれていますが、
[[DOM Standard]] の「removing steps」を参照するようになっています [SRC[>>17, >>19]]。
[REFS[
- [15] [CITE@en[Fix the low-level remove/insert hooks and rewrite NodeIterator in terms ... · 4937f1a · whatwg/dom]] ([TIME[2014-08-21 15:00:44 +09:00]] 版) <https://github.com/whatwg/dom/commit/4937f1a5e39c0914ad2f0a3a35558cf1678e8b89>
- [14] [CITE@en[Bug 24653 – Planning on changing mutation hooks]] ([TIME[2014-08-21 15:00:12 +09:00]] 版) <https://www.w3.org/Bugs/Public/show_bug.cgi?id=24653#c3>
- [13] [CITE@en[Fix nits and properly integrate with DOM https://www.w3.org/Bugs/Public/... · d1b6a38 · whatwg/fullscreen]] ([TIME[2014-08-21 14:59:58 +09:00]] 版) <https://github.com/whatwg/fullscreen/commit/d1b6a381a37354b65f63d81692dd7a15ba512732>
- [17] [CITE@en[Web Applications 1.0 r8769 Integrate with DOM for 'removing steps' and 'insertion steps'.]] ([TIME[2014-09-13 03:23:00 +09:00]] 版) <http://html5.org/r/8769>
- [19] [CITE@en[Sync with r8769 (Integrate with DOM for 'removing steps' and 'insertion ... · 4a62050 · ResponsiveImagesCG/picture-element]] ([TIME[2014-09-15 08:59:45 +09:00]] 版) <https://github.com/ResponsiveImagesCG/picture-element/commit/4a620502e75e2839842fa737a3bc25894836e895>
]REFS]
[21] [CITE@en[Fix #34: invoke insertion/removing steps for descendants · whatwg/dom@5ec535e]]
([TIME[2016-03-05 18:28:13 +09:00]] 版)
<https://github.com/whatwg/dom/commit/5ec535e56111d600b8afe89d0b4f709ab844461e>
[23] [CITE@en[Shadow: run insertion and removing steps also for shadow trees · whatwg/dom@2d5aaed]]
([TIME[2016-03-16 15:12:38 +09:00]] 版)
<https://github.com/whatwg/dom/commit/2d5aaed1f525561a2c92b4e23ae2b7e6ff8244ad>
[22] [CITE@en[Only pass oldParent to removing steps for the node actually removed · whatwg/dom@baf4e6e]]
([TIME[2016-03-16 15:16:05 +09:00]] 版)
<https://github.com/whatwg/dom/commit/baf4e6e83e473330e5b073df77c091815489bb81>
[24] [CITE@en[Add support for custom elements · whatwg/dom@7f63535]]
([TIME[2016-04-13 22:19:26 +09:00]] 版)
<https://github.com/whatwg/dom/commit/7f63535da39a1cbf7f8f68563abc6f05f760990a>
[26] [CITE@en[Generalize inserted/removed into/from a document algorithms · whatwg/html@8da5a18]]
([TIME[2016-04-25 18:10:13 +09:00]] 版)
<https://github.com/whatwg/html/commit/8da5a18b447290ffcdd6c23e268a6e75f906c684>