0
我需要向定制CMS中的函数输出的导航HTML添加类。使用php dom操作html导航
我可以得到我需要的输出的唯一方法是用PHP解析HTML。
我使用PHP的DOM方法来查看HTML并向任何包含子<ul>
(顶级导航项)的<li>
元素添加类。
到目前为止,它的工作,但我有2个问题:
有没有更有效的办法,我通过这个DOM数据?我觉得很麻烦,但那可能只是我缺乏经验。
在某些情况下,我的
<li>
元素可能已经有一个类,如何添加到现有的类属性而不破坏可能已经存在或可能不存在的元素?
-
<?
$mcms_nav = getContent(
// call to cms that returns navigation html as a string
// ex. <ul id="pnav"><li><a href="/">home</a></li>....</ul>
);
$dom = new DOMDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->loadHTML($mcms_nav);
$x = new DOMXPath($dom);
foreach($x->query('//ul/li/ul') as $node)
{
$parent = $node->parentNode;
$parent_attr = $dom->createAttribute('class');
$parent_attr->value = 'has-flyout';
$parent->appendChild($parent_attr);
$flyout_attr = $dom->createAttribute('class');
$flyout_attr->value = 'flyout';
$node->appendChild($flyout_attr);
}
$mcms_nav = $dom->getElementByID('pnav');
echo $dom->saveHTML($mcms_nav);
?>
蛋糕是不是在我的情况选择,但感谢您的建议。事实证明,setAttribute方法创建一个属性,如果它尚不存在。这也节省了一些代码。 – mjr