我正在尝试在网站上进行一些动态CSS样式更新,并且需要使用PHP而不是JavaScript。我只需要设置包含div
标记的img
个标记,并忽略其余的div
标记。
这是我到目前为止所做的:
$dom = new domDocument; $dom->loadHTML($test); $dom->preserveWhiteSpace = false; $divs = $dom->getElementsByTagName('div'); foreach ($divs as $div) { $saveXML[] = $dom->saveXML($div); $childNotes[] = $div->getChildNodes; }
我只想在这里尝试两种方法。 $saveXML
选项的问题在于它给了我完整的代码包括封装div
。我不想那样。此外,从现在开始,我将不得不在代码上运行正则表达式或其他内容,以查找其中是否包含img
标记。
$childNodes
选项应该是我想到的最好但是数组返回为空。这本来不错,因为我可以简单地试过像
if ($childNode->nodeType == 'img'){ $div->setAttribute('class', $new_attributes); }
(我认为最后一点完全没有,但这就是一般概念)..
以下是我需要搜索的HTML代码示例
div class="image-left drop-shadow raised" style="width: 210px"> img src="images/myimage.jpg" width="200" height="150" class="size-full" / p>EDIT THIS DIV's STYLE /p> /div> div class="blocktext" style="width: 150px;"> p>DONT EDIT THIS DIVs STYLE /p> /div>
任何帮助请...
答案 0 :(得分:0)
我希望您的示例HTML不是您使用的实际html。许多标签都没有打开/关闭“<”。
但是,如果不是,那么你可以使用:
$childNode->getElementsByTagName('img');
如果有一个图像,这将会返回,从阅读http://php.net/manual/en/domdocument.getelementsbytagname.php我得到它将返回一个列表...我可能是错的,但是把这个想法扔到那里。
答案 1 :(得分:0)
Trydomxpath。 http://php.net/manual/en/domxpath.query.php
答案 2 :(得分:0)
您通常使用Xpath query:
执行此操作$xp = new DOMXPath($dom)
$divsContainingImg = $xp->query('//div/img/..');
foreach ($divsContainingImg as $div)
{
/* @var $div DOMElement */
...
}
这将选择<{1}}元素的直接子元素的所有img
元素,然后选择它的父元素(div
元素)。