我试图删除给定类的每个节点.
要找到我使用的元素:
$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)
| 归档时间: |
|
| 查看次数: |
5864 次 |
| 最近记录: |