回答編集履歴

2

おっと

2019/04/01 16:35

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36074

test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  /*
36
36
 
37
- ['c1']
37
+ [['c1']]
38
38
 
39
39
  */
40
40
 
@@ -42,7 +42,7 @@
42
42
 
43
43
  /*
44
44
 
45
- ['c2']
45
+ [['c2']]
46
46
 
47
47
  */
48
48
 
@@ -58,7 +58,7 @@
58
58
 
59
59
  /*
60
60
 
61
- ['c1','c2']
61
+ [['c1'],['c2']]
62
62
 
63
63
  */
64
64
 
@@ -66,7 +66,7 @@
66
66
 
67
67
  /*
68
68
 
69
- ['c2']
69
+ [['c2']]
70
70
 
71
71
  */
72
72
 

1

なんか分かりにくいかな、と思って追記を書いている間に解決しちゃった件

2019/04/01 16:35

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア36074

test CHANGED
@@ -1,3 +1,119 @@
1
1
  DOMは[ツリー構造](https://wa3.i-3-i.info/word1257.html)なので、ノードは複数の親要素を持てないのです。
2
2
 
3
3
  ですから、ある要素が`appendChild`メソッドにより別の親要素の子要素となった場合、前の親要素との親子関係は保持できないです。
4
+
5
+
6
+
7
+ ##### なんか分かりにくいかな、と思って追記を書いている間に解決しちゃった件
8
+
9
+ ```js
10
+
11
+ {
12
+
13
+ //配列で試す。
14
+
15
+
16
+
17
+ //子要素
18
+
19
+ const c1 = ['c1'];
20
+
21
+ const c2 = ['c2'];
22
+
23
+ //親要素
24
+
25
+ const p1 = [c1];
26
+
27
+ const p2 = [c2];
28
+
29
+
30
+
31
+ //親要素の中身はこうなってる。
32
+
33
+ p1;
34
+
35
+ /*
36
+
37
+ ['c1']
38
+
39
+ */
40
+
41
+ p2;
42
+
43
+ /*
44
+
45
+ ['c2']
46
+
47
+ */
48
+
49
+
50
+
51
+ //親要素 p1 に、子要素 c2 を追加する。
52
+
53
+ p1.push(c2);
54
+
55
+ //親要素の中身はこうなる。
56
+
57
+ p1;
58
+
59
+ /*
60
+
61
+ ['c1','c2']
62
+
63
+ */
64
+
65
+ p2;
66
+
67
+ /*
68
+
69
+ ['c2']
70
+
71
+ */
72
+
73
+
74
+
75
+ /*
76
+
77
+ 一見、c2が増えたように見えるけど、実は増えていない。
78
+
79
+ p1[1] と p2[0] は同じ c2 を見ている。
80
+
81
+ */
82
+
83
+
84
+
85
+ //子要素 c2 を書き換える。
86
+
87
+ c2[1] = "c2の2"
88
+
89
+ //親要素の中身はこうなる。
90
+
91
+ p1;
92
+
93
+ /*
94
+
95
+ [["c1"],["c2","c2の2"]]
96
+
97
+ */
98
+
99
+ p2;
100
+
101
+ /*
102
+
103
+ [["c2","c2の2"]]
104
+
105
+ */
106
+
107
+
108
+
109
+ /*
110
+
111
+ 上記のとおり、p1[1] と p2[0] は同じ c2 を見ている。
112
+
113
+ ただし、配列はツリー構造ではないから、親を複数持てるので、こうなる。
114
+
115
+ */
116
+
117
+ }
118
+
119
+ ```