Используя DOMDocument, можно ли получить все элементы, которые существуют в пределах определенной DOM?
Скажем, у меня есть HTML файл с множеством разных элементов, каждый из которых имеет разные атрибуты. Скажем, я не знаю заранее, как будет выглядеть этот HTML-код.
Используя PHP DOMDocument, как я могу перебирать элементы ВСЕ и изменять их? Все, что я вижу, это getElementByTagName и getElementById и т.д. Я хочу перебирать все элементы.
Например. Скажем, HTML выглядит так (просто пример, на самом деле я не знаю структуру):
$html = '<div class="potato"><span></span></div>';
Я хочу иметь возможность простой модификации DOM (например, в Javascript):
$dom = new DOMDocument();
$dom->loadHTML($html);
// Obviously the code below doesn't work but showcases what I want to achieve
foreach($dom->getAllElements as $element ){
if(!$element->hasClass('potato')){
$element->addClass('potato');
} else{
$element->removeClass('potato');
}
}
$html = $dom->SaveHTML();
Итак, в этом случае я хотел бы, чтобы полученный html выглядел так:
$html = '<div><span class="potato"></span></div>';
Итак, как я могу перебирать все элементы и выполнять модификации "на лету" в foreach-loop? Я действительно не хочу использовать regex для этого.
Ответы
Ответ 1
Вы можете передать звездочку *
с getElementsByTagName()
, которая возвращает все элементы:
foreach($dom->getElementsByTagName('*') as $element ){
}
Из Manual:
имя
Локальное имя (без пространства имен) тега для соответствия. Специальное значение * соответствует всем тегам.