例えば以下のHTMLがあります。
HTML
1<html>
2<head>
3</head>
4<body>
5 <div id="a">
6 div A
7 </div>
8 <div id="b">
9 div B
10 <div id="c">
11 div C
12 </div>
13 </div>
14</body>
15</html>
このdiv Aを以下のコードでdiv CにappendChildします。
JavaScript
1var divA = document.querySelector("#a");
2var divC = document.querySelector("#c");
3divC.appendChild(divA);
するとdiv Aはもともと居た場所からdiv Cの中へ移動します。
HTML
1<body>
2 <div id="b">
3 div B
4 <div id="c">
5 div C
6 <div id="a">
7 div A
8 </div>
9 </div>
10 </div>
11</body>
「追加しようとしたノードが既に存在していたら」というのは、すでにdocument内にあるものであれば、という意味です。document.createElement
で生成しただけのエレメントはまだdocument内に含まれていません。
**「ノードが同時にドキュメントの 2 箇所に存在できない」**というのは、同じノードを複数箇所にappendしても、コピーされるのではなく移動するだけである、ということを指しています。
divAをdivCにappendChildしたあと、divBにもappendChildすると、最終的にdivAはdivBの中にだけ存在し、divCから移動したことになります。しかし、cloneNodeすれば話は別です。
JavaScript
1var divA = document.querySelector("#a");
2var divC = document.querySelector("#c");
3divC.appendChild(divA.cloneNode(true));
【動作サンプル】
https://jsfiddle.net/72ws2L0h/