HTML-контент
<div class = "card mb-3 template">
<div class = "card-body">
<div class = "row mt-3">
<div class = "col-sm-4">
<h4>This is title</h4>
</div>
<div class = "col-sm-8 text-right">
<button>Close</button>
</div>
</div>
</div>
</div>
Я хочу вставить элемент div после <h4>, например
<div class = "col-sm-4">
<h4>This is title</h4>
<div class = "status"></div>
</div>
В jQuery довольно просто
$('<div class = "status"></div>').insertAfter($('.template').find('h4'));
Но как я могу это сделать в DomCrawler?
$crawler = new \Symfony\Component\DomCrawler\Crawler($html);
$nodes = $crawler->filter('.template');
foreach ($nodes as $node) { // there are multiple template
// so how to insert the div element after h4
}






Symfony DomCrawler - это просто причудливая оболочка для PHP, встроенного в класс DOMDocument. Используя getNode, вы получите объект DOMNode элемента, который вам понадобится для выполнения метода insertAfter.
$crawler = new \Symfony\Component\DomCrawler\Crawler($html);
$domDocument = $this->crawler->getNode(0)->parentNode; //this is how you get domDocument
//creating div
$div = $domDocument->createElement('div');
$div->setAttribute('class', 'status');
//adding div after h4 tag
$h4 = $crawler->filter('h4')->getNode(0);
$h4->parentNode->insertBefore( $div, $h4->nextSibling);
Проверить symfony.com/doc/current/components/dom_crawler.html