I am trying to replace one of my div's content:
$html = new DOMDocument();
$html->loadHTML($content);
$elements = $html->getElementsByTagName('div');
foreach($elements as $element){
if($element->getAttribute('name') == "left_0"){
$element->nodeValue = "<h2>Title</h2>";
}
echo $html-> saveHTML();
I get the following output in my index.php:
<h2>Title</h2>
I was looking for an answer, but cant find a way to fix it. Thanks!
In a tag with content like: <h2>Tom</h2>
, Tom
is the nodeValue
and h2
is the nodeName
.
You cannot write to nodeName
. To create a new node you will have to use this:
$html = new DOMDocument();
$html->loadHTML($content);
$elements = $html->getElementsByTagName('div');
foreach($elements as $element) {
if ($element->getAttribute('name') == "left_0") {
$newElement = $html->createElement('h2','Tom');
$element->appendChild($newElement);
}
If you want to append nested tags, like <p><h2>Title</h2></p>
you would do:
$paragraph = $html->createElement('p'); // create outer <p> tag
$currentElement->appendChild($paragraph); // attach it to parent element
$heading2 = $html->createElement('h2','Title'); // create inner <h2> tag
$paragraph->appendChild($heading2); // attach that to the <p> tag