Узел может иметь только одного родителя. Поэтому я предполагаю, что когда вы вызываете $wrapperDiv->appendChild($child);
, $child
больше не является потомком $body
и, следовательно, $body->removeChild($child);
выдает ошибку.
Значение: вам не нужно удалять ребенка, так как он уже удален.
Если, с другой стороны, вы действительно хотите удалить детей и никуда не добавлять их, удалите $wrapperDiv->appendChild($child);
.
Обновление: Действительно, кажется, что если есть несколько узлов Элемента, не все узлы перемещаются: http://codepad.org/8udqSNMj
Чтобы это исправить, попробуйте перебрать дочерние элементы в обратном порядке:
$children = $body->childNodes;
for($i = $children->length; $i--;) {
$child = $children->item($i);
if($child->nodeName != "#text") {
$wrapperDiv->appendChild($child);
}
}
http://codepad.org/LtuJN2ZT