BonBonSlick
@BonBonSlick
Vanilla Full Stack Web Architector

Как получить доступ к DIV внутри DIV?

Есть такой код html:

<div class="fullnews">
       <div class="fullnews-header"><a href="#">Some Text</a></div><br />
       <div class="fullnews-header">Post Title</div>
    </div>

Надо запарсить 2-й блок *fullnews-header*, пропустив первый *fullnews-header*, в котором лежат ссылки. Как это сделать? Laravel / PHP. Готовый парсер есть уже, только заходит в первый блок *fullnews-header*...
  • Вопрос задан
  • 316 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Скопирую свой ответ со SO, чего уж :)

В Laravel, кажется, есть встроенные инструменты из компонентов Symfony, но стандартными средствами это можно сделать так:
$html = '<div class="fullnews">
       <div class="fullnews-header"><a href="#">Some Text</a></div><br />
       <div class="fullnews-header">Post Title</div>
    </div>';
    
    $dom = new DOMDocument();
    
    $dom->loadHTML($html);
    
    $xpath = new DOMXPath($dom);
    
    $container = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' fullnews ')]")[0];
    
    $node = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' fullnews-header ')]", $container)[1];
    
    var_dump($node->textContent);

sandbox.onlinephpfunctions.com/code/a895ca8f4929f3...

Для устаревших версий php нужно просто вынести выбор по индексу массива в отдельный шаг:
$containerNodes = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' fullnews ')]");
$container = $containerNodes[0];
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
DirecTwiX
@DirecTwiX
"display: flex;" уже предлагали?
:nth-child/:last-child

Но я бы добавил класс к нужному блоку.
Ответ написан
AtriSimone
@AtriSimone
Осваиваю Front-end
Собственно, ответ выше от DTX самое оно.
Что то на подобии:
<div class="fullnews">
       <div class="fullnews-header"><a href="#">Some Text</a></div><br />
       <div class="fullnews-subHeader">Post Title</div>
    </div>

Или любое другое название класса, которое логически подойдет для вашей разметки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы