我想使用Simple HTML DOM删除文章中的所有图片,这样我就可以轻松地为新闻自动收录器创建一小段文本,但我还没想出如何用它删除元素。
基本上我会做
任何帮助?
答案 0 :(得分:49)
没有专门的方法来删除元素。你只需找到所有的img元素然后再做
$e->outertext = '';
答案 1 :(得分:28)
当您只删除外部文本时,您删除了HTML内容本身,但如果您对相同的元素执行另一次查找,它将显示在结果中。原因是简单的HTML DOM对象仍然具有元素的内部结构,只是没有它的实际内容。为了真正删除元素,您需要做的只是将HTML作为字符串重新加载到同一个变量中。这样,将在没有删除内容的情况下重新创建对象,并且将在没有它的情况下构建简单的HTML DOM对象。
这是一个示例函数:
public function removeNode($selector)
{
foreach ($this->find($selector) as $node)
{
$node->outertext = '';
}
$this->load($this->save());
}
将此函数放在simple_html_dom类中,你很好。
答案 2 :(得分:11)
我认为你有一些困难,因为你忘了保存(将内部DOM树转储回字符串)。
试试这个:
$html = file_get_html("http://example.com");
foreach($html ->find('img') as $item) {
$item->outertext = '';
}
$html->save();
echo $html;
答案 3 :(得分:4)
我无法弄清楚将函数放在何处,所以我只是将以下内容直接放在我的代码中:
$html->load($html->save());
它基本上将for循环中所做的更改锁定回上面的html。
答案 4 :(得分:2)
假设的解决方案非常昂贵,并且在大循环或其他类型的重复中几乎无法使用。
我更喜欢使用"软删除":
library(dplyr)
result <- sampledput %>% group_by(V2, V3) %>% summarise(V1 = V1[length(V1)])
答案 5 :(得分:1)
这对我有用:
foreach($html->find('element') as $element){
$element = NULL;
}
答案 6 :(得分:0)
自removeNode
起添加新答案绝对是删除该答案的更好方法:
$html->removeNode('img');
标记接受的答案时,此方法可能不可用。您无需循环html来查找每个HTML,这将删除它们。
答案 7 :(得分:0)
使用outerhtml代替outertext
<div id='your_div'>the contents of your div</div>
$your_div->outertext = '';
echo $your_div // echoes <div id='your_div'></div>
$your_div->outerhtml= '';
echo $your_div // echoes nothing