質問するログイン新規登録

回答編集履歴

2

おっと

2019/04/01 16:35

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37595

answer CHANGED
@@ -16,11 +16,11 @@
16
16
  //親要素の中身はこうなってる。
17
17
  p1;
18
18
  /*
19
- ['c1']
19
+ [['c1']]
20
20
  */
21
21
  p2;
22
22
  /*
23
- ['c2']
23
+ [['c2']]
24
24
  */
25
25
 
26
26
  //親要素 p1 に、子要素 c2 を追加する。
@@ -28,11 +28,11 @@
28
28
  //親要素の中身はこうなる。
29
29
  p1;
30
30
  /*
31
- ['c1','c2']
31
+ [['c1'],['c2']]
32
32
  */
33
33
  p2;
34
34
  /*
35
- ['c2']
35
+ [['c2']]
36
36
  */
37
37
 
38
38
  /*

1

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

2019/04/01 16:35

投稿

Lhankor_Mhy
Lhankor_Mhy

スコア37595

answer CHANGED
@@ -1,2 +1,60 @@
1
1
  DOMは[ツリー構造](https://wa3.i-3-i.info/word1257.html)なので、ノードは複数の親要素を持てないのです。
2
- ですから、ある要素が`appendChild`メソッドにより別の親要素の子要素となった場合、前の親要素との親子関係は保持できないです。
2
+ ですから、ある要素が`appendChild`メソッドにより別の親要素の子要素となった場合、前の親要素との親子関係は保持できないです。
3
+
4
+ ##### なんか分かりにくいかな、と思って追記を書いている間に解決しちゃった件
5
+ ```js
6
+ {
7
+ //配列で試す。
8
+
9
+ //子要素
10
+ const c1 = ['c1'];
11
+ const c2 = ['c2'];
12
+ //親要素
13
+ const p1 = [c1];
14
+ const p2 = [c2];
15
+
16
+ //親要素の中身はこうなってる。
17
+ p1;
18
+ /*
19
+ ['c1']
20
+ */
21
+ p2;
22
+ /*
23
+ ['c2']
24
+ */
25
+
26
+ //親要素 p1 に、子要素 c2 を追加する。
27
+ p1.push(c2);
28
+ //親要素の中身はこうなる。
29
+ p1;
30
+ /*
31
+ ['c1','c2']
32
+ */
33
+ p2;
34
+ /*
35
+ ['c2']
36
+ */
37
+
38
+ /*
39
+ 一見、c2が増えたように見えるけど、実は増えていない。
40
+ p1[1] と p2[0] は同じ c2 を見ている。
41
+ */
42
+
43
+ //子要素 c2 を書き換える。
44
+ c2[1] = "c2の2"
45
+ //親要素の中身はこうなる。
46
+ p1;
47
+ /*
48
+ [["c1"],["c2","c2の2"]]
49
+ */
50
+ p2;
51
+ /*
52
+ [["c2","c2の2"]]
53
+ */
54
+
55
+ /*
56
+ 上記のとおり、p1[1] と p2[0] は同じ c2 を見ている。
57
+ ただし、配列はツリー構造ではないから、親を複数持てるので、こうなる。
58
+ */
59
+ }
60
+ ```