Метод ancestors
Метод ancestors класса Crawler возвращает новый объект Crawler,
содержащий всех предков текущего узла - то есть родителя,
родителя родителя и так далее до корня документа.
Метод не принимает параметров.
Исходный объект Crawler при этом не изменяется.
Синтаксис
$crawler->ancestors()
Пример
Давайте получим всех предков узла span из HTML-документа:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DomCrawler\Crawler;
class ArticleController extends AbstractController
{
public function index(): Response
{
$html = '
<div class="wrap">
<section class="content">
<p class="text"><span>abcde</span></p>
</section>
</div>
';
$crawler = new Crawler($html);
$ancestors = $crawler->filter('span')->ancestors();
foreach ($ancestors as $node) {
echo $node->nodeName . ' ';
}
return new Response();
}
}
?>
Результат выполнения кода:
"p section div"
Пример
Давайте выведем классы всех предков узла:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DomCrawler\Crawler;
class ArticleController extends AbstractController
{
public function index(): Response
{
$html = '
<div class="wrap">
<section class="content">
<p class="text"><span>abcde</span></p>
</section>
</div>
';
$crawler = new Crawler($html);
$ancestors = $crawler->filter('span')->ancestors();
foreach ($ancestors as $node) {
echo $node->getAttribute('class') . ' ';
}
return new Response();
}
}
?>
Результат выполнения кода:
"text content wrap"
Пример
Давайте посчитаем количество предков у узла:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\DomCrawler\Crawler;
class ArticleController extends AbstractController
{
public function index(): Response
{
$html = '
<div class="wrap">
<section class="content">
<p class="text"><span>abcde</span></p>
</section>
</div>
';
$crawler = new Crawler($html);
$count = $crawler->filter('span')->ancestors()->count();
echo $count;
return new Response();
}
}
?>
Результат выполнения кода:
3