如何使用PHP从外部html文件中删除具有特定ID的div?
这是 index.php 的一部分:
<div id="linkovi">text to be deleted</div>
我制作了一个PHP脚本,该脚本使同一个div的ID每次运行时都会更改。现在,我需要一种删除那些div的方法。真正的问题是,如果我要删除我不想删除的其他两个div之间的其中一个div,如下所示:
<div id="linkovi">text to be deleted</div>
<div id="linkovi1">text to be deleted 1</div> <!-- Div that should be deleted-->
<div id="linkovi2">text to be deleted 2</div>
是否可以删除两者之间的div?
答案 0 :(得分:2)
这有效:
function deleteDivById($a,$b) {
$x = file_get_contents($b);
$y = '<did id="'.$a.'">';
$dom = new DOMDocument;
$dom->loadHTML($x);
$xPath = new DOMXPath($dom);
$nodes = $xPath->query('//*[@id="'.$a.'"]');
if($nodes->item(0)) {
$nodes->item(0)->parentNode->removeChild($nodes->item(0));
}
$z = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML()));
echo $z;
}
用法:
deleteDivById('linkovi1','htmlfile.html');
希望这会有所帮助!
答案 1 :(得分:0)
另一种解决方案:
function removeElements($elementSelectors) {
// Create a javascript array of selectors
$jsArray = '[ ';
foreach($elementSelectors as $selector) {
$jsArray .= "'" . $selector . "', ";
}
$jsArray = substr($jsArray, 0, -2); // remove last ","
$jsArray .= ' ]';
$script = '(() => ' . $jsArray . '.map(selector => document.querySelector(selector))'; // searches for the element
$script .= '.filter(element => !!element).forEach(element => element.remove()))();';
echo '<script>' . $script . '</script>';
}
通过这样的呼叫:
removeElements(array('#some-element', '#other-element'));
输出为:
<script>(() => [ '#some-element', '#other-element' ].map(selector => document.querySelector(selector)).filter(element => !!element).forEach(element => element.remove()))();</script>
此php函数创建一个立即调用的javascript函数,该函数将删除给定的元素。可以将ID作为选择器使用。
答案 2 :(得分:0)
我制作了一个函数,该函数实际上可以从目标文件中查找和删除<div>
。
这是功能:
function delete_div($file, $target, $replacement, $from, $to){
$side = file($file, FILE_IGNORE_NEW_LINES);
$reading = fopen($from, 'r');
$writing = fopen($to, 'w');
$replaced = false;
while (!feof($reading)) {
$line = fgets($reading);
if (stristr($line,$target)) {
$line = $replacement;
$replaced = true;
}
fputs($writing, $line);
}
fclose($reading); fclose($writing);
if ($replaced){
rename($to, $from);
} else {
unlink($to);
}
}
$file
是要在其中删除div的文件。
$target
是div或您要替换的任何其他元素(在$target
中,您必须指定div中的内容,结束标记和开始标记以及空格,也就是。) )。
$replacement
是您要替换div的内容(在我的情况下是”,这意味着什么也没有)。
$from
是要重命名文件(在此过程中,文件中的所有内容都会放入一个临时文件中,并且在替换div之后,该文件将被重命名为其原始名称。我知道我可以只是使用$file
数据,而不是在函数中添加其他参数,但是我这样写是为了防止有人在替换div后重命名文件)。
$to
是临时文件的名称(只要将扩展名放在文件名后,命名临时文件就没有关系,因为替换div后临时文件会被删除)
所以您可以使用如下功能:
delete_div('index.php', '<div id="linkovi1">text to be deleted 1</div>', '', 'index.php', 'rip.tmp');