Попробуйте:
$img->parentNode->insertBefore($before, $img);
Добавление $img
в качестве аргумента («ссылочный узел») к функции вставки явно указывает вставке, где в иерархии вы хотите вставить новый узел. В противном случае в документах просто говорится «добавлено к дочерним элементам», что означает, что новый узел будет последним из дочерних элементов родителя.
, например
<span> <-- parentNode
<b>This is some text before the image</b>
<img ...> <--- $img node
<i>This is some text after the image</b>
</span>
Без дополнительного аргумента вы получите:
<span>
<b>...</b>
<img ...>
<i>...</i>
new text node here <-- appended to parent Node's children, e.g. last
</span>
С аргументом вы получите:
<span>
<b>...</b>
new text node here <--the "before" position
<img ...>
<i>...</i>
</span>