Попробуйте следующее Селектор CSS
b > span.marked
Это бы вернуло интервал, поэтому вам, вероятно, придется сделать $e->parent()
, чтобы добраться до элемента b.
Также см. Лучшие методы для анализа HTML для альтернатив SimpleHtmlDom
Изменить после обновления:
Ваш браузер изменит DOM . Если вы посмотрите на свою разметку , вы увидите, что элементов tbody нет. Тем не менее, Firebug дает вам
html body div#wrapper table.desc tbody tr td div span.marked'
html body div#wrapper table.desc tbody tr td table.split tbody tr td b'
Кроме того, ваш вопрос не соответствует запросам. Вы спросили, как найти
элементы, окруженные тегами <b>,</b>
, за которыми следует <span class="marked">
Это можно прочитать как означающее
<b><span class="marked">foo</span></b>
или
<b><element>foo</element></b><span class="marked">foo</span>
Для этого сначала используйте дочерний комбинатор , который я показал ранее. Для второго используйте соседний братский комбинатор
b + span.marked
, чтобы получить диапазон, а затем используйте $e->prev_sibling()
, чтобы вернуть предыдущего родственного элемента (или ноль, если не найден).
Однако в показанной вами разметке нет ни того, ни другого. Существует только DIV с ребенком SPAN, имеющим отмеченный класс
<div style="text-align: center"> <span class="marked">marked</span>
Если это то, что вы хотите сопоставить, это снова дочерний комбинатор. Конечно, вы должны изменить b тогда на div.