回答編集履歴

3

コピーとremoveの必要がないため、削除、なぜエラーが出ていたかの解説

2020/06/10 10:59

投稿

miyabi_pudding
miyabi_pudding

スコア9555

test CHANGED
@@ -8,11 +8,7 @@
8
8
 
9
9
  datas.forEach(elm => {
10
10
 
11
- const elClone = elm.cloneNode(true);
12
-
13
- elm.remove();
14
-
15
- targetParent.insertBefore(elClone, target);
11
+ targetParent.insertBefore(elm, target);
16
12
 
17
13
  });
18
14
 
@@ -32,12 +28,40 @@
32
28
 
33
29
  document.querySelectorAll('.original-data').forEach(elm => {
34
30
 
35
- target.parentNode.insertBefore(elm.cloneNode(true), target);
31
+ target.parentNode.insertBefore(elm, target);
36
-
37
- elm.remove();
38
32
 
39
33
  });
40
34
 
41
35
  ```
42
36
 
43
37
  (いや、もうちと簡略できるかもしれない)
38
+
39
+
40
+
41
+ # エラーの原因
42
+
43
+ `insertBefore`メソッドの使い方が間違っているからです。
44
+
45
+ `移動したい要素の親.insertBefore(移動したい要素, 前に移動する時のターゲット);`
46
+
47
+ という使い方です。
48
+
49
+ なので、質問者さんのコードを直すと下記になります。
50
+
51
+ ```javascript
52
+
53
+ // 下記定義はいらない
54
+
55
+ // let newNode = document.createElement('span');
56
+
57
+ let originalData = document.querySelectorAll('.original-data');
58
+
59
+ let afterMovingData = document.getElementById('after-moving').parentNode;
60
+
61
+ for (i = 0, len = originalData.length; i < len; i++) {
62
+
63
+ afterMovingData.insertBefore(originalData[i], document.getElementById('after-moving'));
64
+
65
+ }
66
+
67
+ ```

2

変数宣言が抜けていたので追記

2020/06/10 10:59

投稿

miyabi_pudding
miyabi_pudding

スコア9555

test CHANGED
@@ -28,6 +28,8 @@
28
28
 
29
29
  ```javascript
30
30
 
31
+ const target = document.getElementById('after-moving');
32
+
31
33
  document.querySelectorAll('.original-data').forEach(elm => {
32
34
 
33
35
  target.parentNode.insertBefore(elm.cloneNode(true), target);

1

行数節約版を追記

2020/06/10 10:28

投稿

miyabi_pudding
miyabi_pudding

スコア9555

test CHANGED
@@ -18,4 +18,24 @@
18
18
 
19
19
  ```
20
20
 
21
- もっと簡略できるかもしれない
21
+ もっと簡略できるかもしれない
22
+
23
+
24
+
25
+ ってわけで行数節約版
26
+
27
+
28
+
29
+ ```javascript
30
+
31
+ document.querySelectorAll('.original-data').forEach(elm => {
32
+
33
+ target.parentNode.insertBefore(elm.cloneNode(true), target);
34
+
35
+ elm.remove();
36
+
37
+ });
38
+
39
+ ```
40
+
41
+ (いや、もうちと簡略できるかもしれない)