2016-08-17 61 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