使用PHP DOMDocument更改所有祖先li元素的类

时间:2016-08-17 21:41:40

标签: php html domdocument

我有ul>的嵌套子弹列表li> ul>李等。

<ul>
    <li>Mammals
        <ul>
            <li>Canine
                <ul>
                    <li>Fox</li>
                    <li>Wolf</li>
                </ul>
            </li>
            <li>Feline</li>
        </ul>
    </li>
    <li>Fish</li>
</ul>

如何将类应用于所有“li”元素(递归),它们是目标元素的祖先?我有:

<?php
$list = ob_get_clean();
$dom = new DOMDocument;
$dom->loadHTML($list);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//li');
foreach ($nodes as $object) {
    $parts = parse_url($object->nodeValue);
    parse_str($parts['query'], $query);
    if (true) {
        //if certain requirements are met, modify the current object
    }
    //also modify all ancestor li elements
    //$object-> ?? ->setAttribute('class', 'current');
}
?>

有必要在搜索每个祖先之前识别目标对象。我只是删除了这段代码的相关性。

1 个答案:

答案 0 :(得分:0)

处理父节点链,改变那些li节点:

<?php

$parentNode = $node->parentNode; // ul

while ($parentNode = $parentNode->parentNode) {
    if ($parentNode->nodeName == 'LI') {
        $parentNode->setAttribute('class', 'current');
    }
}
相关问题