2016-08-17 1 views
1

Я вложенные маркированные списками НСБА> li> уль> литий и т.д.Изменить класс все предка Li элементов с PHP DOMDocument

<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

Смежные вопросы