Вы звоните $imgvalues->parentNode->replaceChild()
, который говорит, чтобы заменить ребенка родителя;таким образом, вы просто заменяете ребенка и не касаетесь родителя.
Вместо этого вы хотите иметь дело с родителем родителя.«Но в моем HTML нет ни одного», - говорите вы.Однако при работе с HTML всегда подразумевается корневой элемент, поэтому это работает:
<?php
$html = '<p><img alt="" height="400" src="img.jpg" width="800" /></p>';
$dom = new DomDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$images = $dom->getElementsByTagName("img");
foreach ($images as $img) {
$img_copy = $img->cloneNode(true);
$p = $img->parentNode;
$fig = $dom->createElement("figure");
$fig->appendChild($img_copy);
$p->parentNode->replaceChild($fig, $p);
}
echo $dom->saveHTML();
Вывод:
<figure><img alt="" height="400" src="img.jpg" width="800"></figure>