php - PHP DOMDocument:按类删除元素

标签 php domdocument

我正在尝试删除具有给定类的每个节点。

查找我使用的元素:

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

但是,如何删除此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>

这对于上面的示例不起作用:
$xpath = new DOMXPath($dom);
foreach( $xpath->query('//div[contains(attribute::class, "delete_this")]') as $e ) {
    $e->parentNode->removeChild($e);
}

最佳答案

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

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

顺便说一句,关于您的第二个问题,如果没有找到任何元素,则该循环根本不会迭代。

这是一个工作示例:
$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);

关于php - PHP DOMDocument:按类删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524217/

相关文章:

PHP domdocument 插入 Â 符号

php - 如何使用 PHP DOMDocument 删除属性?

php - 相同的 XPaths - 不同的结果

PHP:goto 和 while 等其他控制结构有什么区别

javascript - 使用jquery在php中10秒后自动点击提交

PHP 测验脚本答案突出显示

php - 保留在第二个平面数组中找到列值的数组行

php - PHP DOM 有两个 HTML 问题:1.) DOMDocument::createEntityReference $name 值和 2.) 如何向一个元素添加多个 CSS 类?

php - 通过 DOM 或 XPATH 获取每个元素属性的宽度和高度

PHP 获取十进制值回显唯一的第一位数字