PHP DOMDocument removeChild() 仅删除目标 class 的第一个实例
PHP DOMDocument removeChild() only removing only the first instance of targeted class
我需要从 HTML 文档中删除特定 class(仅分配给 div
的所有实例)。这是我正在使用的片段:
$dom = new DOMDocument;
$dom->loadHTML($meaning);
foreach ($dom->getElementsByTagName('div') as $node) {
if($node->getAttribute('class') == "someclass"){
$node->parentNode->removeChild($node);
}
}
这很好用,只是它只删除了第一次出现的 class,剩下的留在后面。这是正常行为吗?我应该在我的代码中修改什么以确保所有属于此 class 的节点都被删除?
试一试。关键是使用 DomNodeList::item()
,如下所示:
$dom = new DOMDocument();
$dom->loadHTML($meaning);
/** @var DomNodeList $divs */
$divs = $dom->getElementsByTagName('div');
for ($i = 0; $i < $divs->length; $i++) {
/** @var DomElement $node */
$node = $divs->item($i);
if ($node->getAttribute('class') == 'someclass') {
$node->parentNode->removeChild($node);
$i--; // Since we just removed an element, we need to readjust our pointer.
}
}
我需要从 HTML 文档中删除特定 class(仅分配给 div
的所有实例)。这是我正在使用的片段:
$dom = new DOMDocument;
$dom->loadHTML($meaning);
foreach ($dom->getElementsByTagName('div') as $node) {
if($node->getAttribute('class') == "someclass"){
$node->parentNode->removeChild($node);
}
}
这很好用,只是它只删除了第一次出现的 class,剩下的留在后面。这是正常行为吗?我应该在我的代码中修改什么以确保所有属于此 class 的节点都被删除?
试一试。关键是使用 DomNodeList::item()
,如下所示:
$dom = new DOMDocument();
$dom->loadHTML($meaning);
/** @var DomNodeList $divs */
$divs = $dom->getElementsByTagName('div');
for ($i = 0; $i < $divs->length; $i++) {
/** @var DomElement $node */
$node = $divs->item($i);
if ($node->getAttribute('class') == 'someclass') {
$node->parentNode->removeChild($node);
$i--; // Since we just removed an element, we need to readjust our pointer.
}
}