Как найти родительский блок?
На странице есть текст, который обернут в заранее не известный div блок.
И у меня есть строка(часть текста) которая соответствует началу текста который на странице.
Вопрос, как определить название класса родительского элемента в который обернут нужный мне текст?
Ответы (1 шт):
Автор решения: alex
→ Ссылка
Узнать название класса родительского элемента можно с помощью регулярного выражения:
$html = '<html><body>
Hello <div class="asdasd">crazy</div> <div class="asdasd"><i></i> world</div>!
</body></html>';
// определяем название класса родительского элемента слова "world"
preg_match("~
<(?'tag'\w*)[^>]*?(?:class=['\"](?'class_name'[0-9a-z-_]+?)['\"])[^>]*?>
.*?(".preg_quote('world').").*? # world - поисковый запрос
</\k'tag'>
~isx", $html, $matches);
$matches = array_filter($matches, "is_string", ARRAY_FILTER_USE_KEY);
/*
print_r($matches);
Array
(
[tag] => div
[class_name] => asdasd
)
*/
Ниже информация не относится к вопросу, но показывает, как можно найти остальной текст, у которого родительский элемент имеет найденный тег $matches['tag'] и класс $matches['class_name']. Это можно сделать с помощью тех же регулярок или simple_html_dom:
$DOM = new simple_html_dom();
$DOM->load($html, true, false);
$text = $DOM->find("{$matches['tag']}[class='{$matches['class_name']}'] text");
foreach($text as $e)
$all_text[] = trim($e->outertext);
/*
print_r($all_text);die;
Array
(
[0] => crazy
[1] => world
)
*/