提取类名并将此信息添加到dom中的另一个元素中


extract class name and add this information to another element in the dom

我需要通过简单的html dom获得类名(数字)的一部分,并将这些信息添加到另一个元素中。

这是我的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;
}

文档中说可以使用CSS选择器来查找节点。如果完全支持这些,您可以使用属性选择器[class^='grd_'],div[class*=' grd_']

如果不支持它们,则必须使用不同的html标记,或者遍历主类中的所有div,并使用strpos($className, 'grd_')来查找匹配的节点。

您需要regex和css的组合:

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