PHP DOMDocument:按类删除元素

use*_*695 2 php domdocument

我试图删除给定类的每个节点.

要找到我使用的元素:

$xpath = new DOMXPath($dom);
    foreach( $xpath->query('//div[contains(attribute::class, "foo")]') as $e ) {
        // Delete this node
    }
Run Code Online (Sandbox Code Playgroud)

但是如何删除这个foreach循环中的元素呢?

编辑:顺便说一句:如果DOM中有一个类"foo"的元素(在开始循环之前),我该如何检查?

更新:

这是我的HTML:

<div class="main">
    <div class="delete_this" contenteditable="true">Target</div>
    <div class="class1"></div>
    <div class="content"><p>Anything</p></div>
</div>
Run Code Online (Sandbox Code Playgroud)

这不适用于上面的示例:

$xpath = new DOMXPath($dom);
foreach( $xpath->query('//div[contains(attribute::class, "delete_this")]') as $e ) {
    $e->parentNode->removeChild($e);
}
Run Code Online (Sandbox Code Playgroud)

hek*_*mgl 10

您需要使用removeChild()父元素的方法:

$xpath = new DOMXPath($dom);
foreach($xpath->query('//div[contains(attribute::class, "foo")]') as $e ) {
    // Delete this node
    $e->parentNode->removeChild($e);
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,关于你的第二个问题,如果没有找到元素,循环根本不会迭代.


这是一个工作示例:

$html = <<<EOF
<div class="main">
    <div class="delete_this" contenteditable="true">Target</div>
    <div class="class1"></div>
    <div class="content"><p>Anything</p></div>
</div>
EOF;

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

$selector = new DOMXPath($doc);
foreach($selector->query('//div[contains(attribute::class, "delete_this")]') as $e ) {
    $e->parentNode->removeChild($e);
}

echo $doc->saveHTML($doc->documentElement);
Run Code Online (Sandbox Code Playgroud)