4

I am trying to put $htmlString into an existing div tag that I have

<?php
    $htmlString = "<ul><li>some items</li><li>some items</li><li>some items</li></ul>";
    $dom = new domDocument;
    $dom->loadHTML($html);
    $div_tag = $dom->getElementById('demo');
    echo $dom->saveHTML($div_tag);
?>

In the div tag, I already have some content and I want to append $htmlString into the div tag

<div id="demo"><h1>Recent Posts</h1></div>

I want the output to be

<div id="demo"><h1>Recent Posts</h1>
<ul><li>some items</li><li>some items</li><li>some items</li></ul>
</div>

As $htmlString is actually produced from another function so I cannot simply do

<div id="demo">
<h1>Recent Posts</h1>
    <?php echo "<ul><li>some items</li><li>some items</li><li>some items</li></ul>" ?>
</div> 
Kimberley Chong
  • 79
  • 1
  • 4
  • 12

2 Answers2

9

Nice and easy, you need a fragment!

<?php

$html = '<div id="demo"><h1>Recent Posts</h1></div>';
$dom = new DomDocument();
$dom->loadHTML($html);

$node = $dom->getElementsByTagName('div')->item(0); // your div to append to

$fragment = $dom->createDocumentFragment();
$fragment->appendXML('<ul><li>some items</li><li>some items</li><li>some items</li></ul>');

$node->appendChild($fragment);

echo $dom->saveHTML();

Which will give you your desired output. Check it out here https://3v4l.org/JrJan

delboy1978uk
  • 12,118
  • 2
  • 21
  • 39
1

You can use [http://php.net/manual/en/domdocument.createelement.php][1]

[1]: http://php.net/manual/en/domdocument.createelement.php, but you need to create all structure for $htmlString. Or you can do like in this answer How to insert HTML to PHP DOMNode?

litruk
  • 56
  • 3