извлечь имя класса и добавить эту информацию к другому элементу в домене

Мне нужно получить часть имени класса (число) через простой HTML-дом и добавить эту информацию в другой элемент.

Это мой HTML:

<div class="main">
<div class="anything grd_3"></div>
<div class="content">
<p>Text</p>
<p>Text</p>
<p>Text</p>
</div>
</div>

Который должен получить:

<div class="main">
<div class="anything grd_3"></div>
<div class="content">
<p>*** Text</p>
<p>Text</p>
<p>Text</p>
</div>
</div>

Это означает, что мне нужно проверить, существует ли класс ‘grd_ *’. Если он существует, мне нужно его количество и добавить количество звездочек к первому p-элементу контента.

PHP:

$html->find('div[class=grd_*]'); // How to search with placeholder?

// tried this one for grd_3 (how do that generally?), but it doesn't work :-(
foreach($html->find('div[class=grd_3]') as $key=>$element){
$html->find('div[class=grd_3]',$key)->next_sibling->first_child->innertext="*** ".$element->next_sibling ->first_child->innertext;
}

Обновить:

foreach($html->find('div[class*=grd_]') as $key=>$element){
if(($html = $html->find('[class*=grd_]', $key)) && preg_match('/grd_(\d+)/', $html->class, $m)){
$stars = '';
for ( $i = 0; $i <= $m[1]; $i++) $stars .= '*';
}
$html->find('div[class*=grd_]',$key)->next_sibling->first_child->innertext=$stars." ".$element->next_sibling ->first_child->innertext;
}

0

Решение

В документации сказано, что вы можете использовать селекторы CSS для поиска узлов. Если они полностью поддерживаются, вы можете использовать селектор атрибута [class^='grd_'],div[class*=' grd_']

В случае, если они не поддерживаются, вы должны либо использовать другую html-разметку, либо перебрать все элементы div внутри вашего основного класса и использовать strpos($className, 'grd_') найти подходящие узлы.

0

Другие решения

Вам понадобится сочетание регулярных выражений и CSS:

if(($el = $html->find('[class*=grd_]', 0)) && preg_match('/grd_(\d+)/', $el->class, $m)){
echo "there are " . $m[1] . " stars.";
}
0

По вопросам рекламы [email protected]