我正在尝试找到一种使用PHP将类名称添加到我的html输出中的方法。
输入:
<div class="clsA">
<div>
<div class="clsB">
Content (can be anything including clsA, clsB etc.)
</div>
</div>
</div>
或
<div class="clsC">
<div class="clsB">
Content (can be anything including clsC, clsB etc.)
</div>
</div>
我希望输出为
<div class="clsA myClass">
<div>
<div class="clsB clsInner">
Content (can be anything including clsA, clsB etc.)
</div>
</div>
</div>
<div class="clsC myClass">
<div class="clsB clsInner">
Content (can be anything including clsC, clsB etc.)
</div>
</div>
对于根类,我想插入一个类名,对于具有指定类名的第二个div,我想添加另一个类名。但是我想不办法不使用第三方库就添加它们。
基本上是伪代码
- Add myClass to the root element
- Add clsInner to the first child element of the root with class name clsB.
注意:我不能用“ clsB clsInner”替换clsB,因为内容中还有其他带有clsB的类。
答案 0 :(得分:2)
对PHP不太熟悉,但这行得通吗?
$dom = new DOMDocument;
$dom->loadHTML($html);
$divs = $dom->getElementsByTagName('div');
foreach ($divs as $div) {
$div->setAttribute('class', $div->getAttribute('class').' myclass');
}
$html = $dom->saveHTML();
答案 1 :(得分:1)
我知道,要使用DOMDocument
按类获取元素,我们还需要使用DOMXpath()
。
因此您可以尝试以下操作:
<?php
$input = '<div class="clsA">
<div>
<div class="clsB">
Content (can be anything including clsA, clsB etc.)
</div>
</div>
</div>';
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($input);
libxml_use_internal_errors(false);
$xpath = new DOMXpath($dom);
foreach($xpath->evaluate('//div[contains(@class, "clsA")]') as $clsA) {
$clsA->setAttribute('class',$clsA->getAttribute('class').' myClass');
}
foreach($xpath->evaluate('//div[contains(@class, "clsB")]') as $clsB) {
$clsB->setAttribute('class',$clsB->getAttribute('class').' clsInner');
}
echo $dom->saveXML($dom);
?>
答案 2 :(得分:0)
假设我已正确理解并且您希望在以某种方式生成内容之后但在客户端看到它之前修改DOM,则可以使用output buffering
,DOMDocument
和{{1 }}随意浏览内容,但是在最终呈现内容之前您认为合适。要查看以下代码的结果,您需要在运行页面时查看页面的源代码(如果按原样运行)
DOMXPath