簡體   English   中英

使用PHP按類名稱刪除列表項

[英]Remove list item by class name using PHP

我試圖在子鏈接具有“隱藏”類時刪除父列表項。 如果班級中的孩子有“隱藏”班級,我將如何獲取班級名稱,然后刪除其父級“ 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
    }

您可以將DOMXPathDOMDocument結合使用。 請嘗試以下操作:

<?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();

產量:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">

<html>
    <body>
        <ul>
            <li><a href="/first">First Item</a></li>
        </ul>
    </body>
</html>

XPath表達式//a[@class="hide"]/..將匹配任何包含“ hide”類的<a>標記,並且/..返回其父項。 因此,您將返回任何匹配項的父節點; 即:在您的示例中,任何匹配項的父<li>

最后,我們遍歷所有匹配的<li>元素,並將每個元素從其父節點中刪除。

以下是有關DOMXPath::query()的更多信息

希望這可以幫助 :)

據我了解,您需要根據內部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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM