Я унаследовал следующий фрагмент кода PHP, который удаляет элементы из DOM, прежде чем помещать содержимое на страницу. Мы только хотим, чтобы первые 5 элементов не имели слишком длинную страницу
Предполагая, что код извлекает фрагмент HTML, структурированный следующим образом:
<div class='year'>2019</div>
<div class='record'>Record A</div>
<div class='record'>Record B</div>
<div class='year'>2018</div>
<div class='record'>Record C</div>
<div class='record'>Record D</div>
<div class='record'>Record E</div>
<div class='year'>2017</div>
<div class='record'>Record F</div>
<div class='year'>2016</div>
<div class='record'>Record G</div>
Теперь фрагмент кода ниже удаляет все лишние records
:
$dom = new DOMDocument();
// be sure to load the encoding
$dom->loadHTML('<?xml encoding="utf-8" ?>' . $tmp);
// let's use XPath
$finder = new DomXPath($dom);
// set the limit
$limit = 5; $cnt = 0;
// and remove unwanted elements
foreach($finder->query("//*[contains(@class, 'record')]") as $elm ) {
if ($cnt >= $limit)
$elm->parentNode->removeChild($elm);
$cnt++;
}
// finally, echo
echo $dom->saveHTML($dom->documentElement);
Логически я получаю следующий HTML-код:
<div class='year'>2019</div>
<div class='record'>Record A</div>
<div class='record'>Record B</div>
<div class='year'>2018</div>
<div class='record'>Record C</div>
<div class='record'>Record D</div>
<div class='record'>Record E</div>
<div class='year'>2017</div>
<div class='year'>2016</div>
Как я мог бы идентифицировать все элементы, имеющие класс year
и имеющий следующий родной брат, также имеющий этот класс, и удалить его? (вот что бы получить элемент 2017)
Тогда я полагаю, что будет только вопрос проверки, имеет ли последний элемент класс year
, и удаление его.
Или есть более чистый способ добиться этого?