2016-08-17 62 views
1

我有嵌套UL的子弹名单> li> ul>李等更改类PHP的DOMDocument所有祖先li元素

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

如何申请一类所有“礼”元素(递归)哪些是目标元素的祖先?我有:

<?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'); 
} 
?> 

有一些原因,目标对象必须在通过每个祖先进行搜索之前进行识别。我刚刚删除了相关代码。

回答

0

工作了父节点链,改变那些li节点:

<?php 

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

while ($parentNode = $parentNode->parentNode) { 
    if ($parentNode->nodeName == 'LI') { 
     $parentNode->setAttribute('class', 'current'); 
    } 
} 
+0

这就是简洁和完美。谢谢! – SiteCarpenter