PHP DOMDocument未删除所有元素
我想删除所有PHP DOMDocument未删除所有元素,php,domdocument,Php,Domdocument,我想删除所有script元素,这里是代码 <?php $pageFile = <<<EOF <!DOCTYPE html><html><body> <script src="aa"></script> <script src="bb"></script> <script src="cc"></script> <div>aaa</div> &l
script
元素,这里是代码
<?php
$pageFile = <<<EOF
<!DOCTYPE html><html><body>
<script src="aa"></script>
<script src="bb"></script>
<script src="cc"></script>
<div>aaa</div>
</body></html>
EOF;
$dom = new DOMDocument();
$dom->loadHTML($pageFile);
foreach ($dom->getElementsByTagName('script') as $item) {
$item->parentNode->removeChild($item);
}
$pageFile = $dom->saveHTML();
echo $pageFile;
$dom->getElementsByTagName
返回的DOMNodeList
是“活动的”。因此,当您删除脚本时,它将从节点列表中删除,并且列表中的所有元素将其索引下移。然后,for的循环转到下一个索引,最后它跳过其他元素
首先将节点列表转换为数组
foreach (iterator_to_array($dom->getElementsByTagName('script')) as $item) {
$item->parentNode->removeChild($item);
}
如果向后迭代,则可以修改甚至删除DOMNodeList中的节点:
使用:
foreach (iterator_to_array($dom->getElementsByTagName('script')) as $item) {
$item->parentNode->removeChild($item);
}
<?php
$pageFile = <<<EOF
<!DOCTYPE html><html><body>
<script src="aa"></script>
<script src="bb"></script>
<script src="cc"></script>
<div>aaa</div>
</body></html>
EOF;
$dom = new DOMDocument();
$dom->loadHTML($pageFile);
$elements = $dom->getElementsByTagName('script');
for ($i = $elements->length; --$i >= 0; ) {
$elem = $elements->item($i);
$elem->parentNode->removeChild($elem);
}
$pageFile = $dom->saveHTML();
echo $pageFile;