使用PHP按类名删除列表项

使用PHP按类名删除列表项,php,domdocument,Php,Domdocument,当子链接具有类“hide”时,我试图删除父列表项。如果父级“li”中的子级具有“hide”类的名称,我如何获取类名,然后删除父级“li” $html = '<ul> <li><a href="/first">First Item</a></li> <li><a class="hide" href="/first">First Item</a></li> </ul&g

当子链接具有类“hide”时,我试图删除父列表项。如果父级“li”中的子级具有“hide”类的名称,我如何获取类名,然后删除父级“li”

$html = '<ul> 
    <li><a href="/first">First Item</a></li>
    <li><a class="hide" href="/first">First Item</a></li>
</ul>';

$dom = new DOMDocument;
@$dom->loadHTML($html);
foreach ($dom->getElementsByTagName('li') as $tag){
    // Check if there is a hide and remove the parent list item
    }
$html='
'; $dom=新的DOMDocument; @$dom->loadHTML($html); foreach($dom->getElementsByTagName('li')作为$tag){ //检查是否存在隐藏并删除父列表项 }
您可以与
DOMDocument
一起使用。请尝试以下操作:

<?php

$html = '<ul>
    <li><a href="/first">First Item</a></li>
    <li><a class="hide" href="/first">Second Item</a></li>
</ul>';

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$elements = $xpath->query('//a[@class="hide"]/..');

foreach ($elements as $el) {
    $el->parentNode->removeChild($el);
}

echo $doc->saveHTML();

据我所知,您需要根据内部a元素的类名从ul中删除第一个li;这里有一个解决方案

  $html = '<ul> 
        <li><a href="/first">First Item</a></li>
        <li><a class="hide" href="/first">First Item</a></li>
    </ul>';

    $doc = new DOMDocument;
    @$doc->loadHTML($html);
    $xpath = new DOMXpath($doc);

    $elements = $xpath->query("//ul/li/a[@class='hide']/parent::*/preceding-sibling::*[1]");


    foreach($elements as $node) {
      $node->parentNode->removeChild($node);
    };
    echo $doc->saveHTML();
$html='
'; $doc=新文档; @$doc->loadHTML($html); $xpath=新的DOMXpath($doc); $elements=$xpath->query(//ul/li/a[@class='hide']/parent::*/前面的同级::*[1]”); foreach($元素作为$node){ $node->parentNode->removeChild($node); }; echo$doc->saveHTML();
  $html = '<ul> 
        <li><a href="/first">First Item</a></li>
        <li><a class="hide" href="/first">First Item</a></li>
    </ul>';

    $doc = new DOMDocument;
    @$doc->loadHTML($html);
    $xpath = new DOMXpath($doc);

    $elements = $xpath->query("//ul/li/a[@class='hide']/parent::*/preceding-sibling::*[1]");


    foreach($elements as $node) {
      $node->parentNode->removeChild($node);
    };
    echo $doc->saveHTML();