Это ожидаемое поведение.Когда вы делаете appendChild()
на узле, который уже находится в DOM, узел перемещается из того места, где он в данный момент находится в DOM, в указанное вами новое местоположение.Это изменит его родителя, а также следующий и предыдущий узлы.
Узел может иметь только одного прямого родителя, поэтому невозможно иметь двух родителей, так как каждый родитель обозначает местоположение для узла и, в отличие оттайны физики элементарных частиц, узел может быть только одно место за один раз.Если вам нужны два узла в двух местах, вы можете либо создать новый узел и добавить его, либо вы можете клонировать существующий узел и добавить этот.
См. cloneNode()
функция для получения информации о том, как сделать копию узла и вставить копию в это второе местоположение.
<script>
window.onload = function() {
pNode = document.getElementById('pNode').cloneNode(true);
pNode.id = "pNode2";
divNode = document.getElementById('divNode');
divNode.appendChild(pNode);
}
</script>
Помните, что при клонировании узлов любые узлы в клонированном дереве, имеющие идентификатор, будут нуждаться в новомID, чтобы значения идентификатора оставались уникальными в документе.