我需要通过简单的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.";
}