РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1172 of 1361 menu

Метод closest класса Crawler

Метод closest класса Crawler возвращает новый объект Crawler, содержащий ближайший родительский элемент, который соответствует заданному CSS-селектору. Поиск начинается с текущего узла и поднимается вверх по дереву DOM. Первым параметром передаётся строка с CSS-селектором. Если подходящий предок не найден, возвращается пустой Crawler.

Синтаксис

public function closest(string $selector): Crawler

Пример

Давайте создадим объект Crawler из 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="wrapper"><section class="content"><a href="/user">link</a></section></div>'; $crawler = new Crawler($html); $link = $crawler->filter('a'); $parent = $link->closest('.content'); return new Response($parent->html()); } } ?>

Результат выполнения кода:

<a href="/user">link</a>

Пример

Давайте проверим, что будет, если подходящий предок не найден:

<?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="wrapper"><a href="/user">link</a></div>'; $crawler = new Crawler($html); $link = $crawler->filter('a'); $parent = $link->closest('.missing'); return new Response((string) $parent->count()); } } ?>

Результат выполнения кода:

0

Пример

Давайте найдём ближайшего предка с тегом section на нескольких уровнях вложенности:

<?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 = '<section class="outer"><div class="inner"><span>text</span></div></section>'; $crawler = new Crawler($html); $span = $crawler->filter('span'); $parent = $span->closest('section'); return new Response($parent->attr('class')); } } ?>

Результат выполнения кода:

"outer"

Смотрите также

  • класс Crawler,
    который представляет DOM-документ для парсинга
  • метод filter,
    который фильтрует узлы по CSS-селектору
  • метод ancestors,
    который возвращает всех предков узла
  • метод parents,
    который возвращает всех родителей узла
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить