Используя PHP я пытаюсь взять строку HTML, переданную от WYSIWYG-редактора и заменить дочерние элементы элемента в предварительно загруженном документе HTML с новым HTML.
До сих пор я загружаю документ, определяющий элемент, который я хочу изменить идентификатором, но процесс для преобразования HTML во что-то, что может быть помещено в DOMElement, ускользает от меня.
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTML($html);
$element = $doc->getElementById($item_id);
if(isset($element)){
//Remove the old children from the element
while($element->childNodes->length){
$element->removeChild($element->firstChild);
}
//Need to build the new children from $html_string and append to $element
}
Если строку HTML можно проанализировать как XML, вы можете сделать это (после очистки элемента от всех дочерних узлов):
$fragment = $doc->createDocumentFragment();
$fragment->appendXML($html_string);
$element->appendChild($fragment);
Если $ html_string не может быть проанализирован как XML, произойдет сбой. Если это так, вам придется использовать loadHTML (), который менее строг, но он добавит элементы вокруг фрагмента, которые вам придется удалить.
В отличие от PHP, Javascript имеет свойство innerHTML, которое позволяет сделать это очень легко. Мне нужно было что-то подобное для проекта, поэтому я расширил DOMElement PHP, включив в него доступ к внутреннему HTML в стиле Javascript.
С его помощью вы можете получить доступ к свойству innerHTML и изменить его так же, как в Javascript:
echo $element->innerHTML;
$elem->innerHTML = '<a href="http://example.org">example</a>';
Источник: http://www.keyvan.net/2012/11/php-domdocument-replace-domelement -child-with-html-string /
Вы можете использовать loadHTML ()
для фрагмента кода, а затем добавить полученные созданные узлы в исходное дерево DOM.