В simple_html_dom, как найти ‹divs› первого уровня в div.classname

Я использую simple_html_dom
У меня есть html в тексте php var $:

<div class="aClass">
  <div>
    ...some html
    <div class="anotherClass">
      ..more html
    </div>
  </div>
  <div>
    ...some html
    <div class="anotherClass">
      ..more html
    </div>
  </div>
</div>

Я знаю, что могу выбрать самый внешний div с помощью $text->find("div.aClass")
Вместо этого я хочу выбрать все div первого уровня внутри этого div, чтобы я мог обрабатывать их как часть цикла foreach
Что-то вроде:

foreach ($text->find("div.aClass div") as $myDiv) {
// do stuff with $myDiv
}

но, похоже, выбираются все div, в том числе с class="anotherClass"

Любая помощь очень ценится - спасибо!


person Mark Highton Ridley    schedule 18.07.2020    source источник


Ответы (1)


Затем вы можете использовать селектор дочернего комбинатора >, который выбирает только элементы, которые являются прямыми дочерними элементами родительского элемента.

div.aClass > div

Например

$html = <<<HTML
<div class="aClass">
  <div>
    ...some html
    <div class="anotherClass">
      ..more html
    </div>
  </div>
  <div>
    ...some html
    <div class="anotherClass">
      ..more html
    </div>
  </div>
</div>
HTML;

$text = str_get_html($html);

foreach ($text->find("div.aClass > div") as $myDiv) {
    echo $myDiv->innertext() . PHP_EOL;
}

Выход

 ...some html     <div class="anotherClass">       ..more html     </div>   
 ...some html     <div class="anotherClass">       ..more html     </div>   
person The fourth bird    schedule 19.07.2020
comment
Большое спасибо, @ the-4th-bird, что это удалось! Узнал кое-что новое :) - person Mark Highton Ridley; 20.07.2020