简单的HTML Dom:如何删除元素?

我想使用简单的HTML DOM删除文章中的所有图像,所以我可以轻松地创build一个新闻股票的文本的小片段,但我还没有想出如何删除它的元素。

基本上我会这样做

  1. 获取HTMLstring的内容
  2. 从内容中删除所有图像标签
  3. 将内容限制为x个单词
  4. 输出。

任何帮助?

没有专门的方法去除元素。 你只要find所有的img元素,然后做

$e->outertext = ''; 

当您只删除外部文本时,您将删除HTML内容本身,但是如果您对相同的元素执行另一个查找,它将显示在结果中。 原因在于简单的HTML DOM对象仍然有它的元素的内部结构,只是没有它的实际内容。 为了真正删除元素,你需要做的只是将HTML作为string重新加载到同一个variables中。 通过这种方式,对象将被重新创build而没有被删除的内容,并且简单的HTML DOM对象将被构build而没有它。

这里是一个示例函数:

 public function removeNode($selector) { foreach ($this->find($selector) as $node) { $node->outertext = ''; } $this->load($this->save()); } 

把这个函数放在simple_html_dom类中,你很好。

我觉得你有一些困难,因为你忘了保存(将内部DOM树转储回string)。

尝试这个:

 $html = file_get_html("http://example.com"); foreach($html ->find('img') as $item) { $item->outertext = ''; } $html->save(); echo $html; 

我不知道在哪里把这个function,所以我只是直接在我的代码中:

 $html->load($html->save()); 

它基本上将for循环中所做的更改locking到上面的html中。

假设的解决scheme相当昂贵,实际上在大循环或其他types的重复中无法使用。

我更喜欢使用“软删除”:

 foreach($html->find('somecondition'),$item){ if (somecheck) $item->setAttribute('softDelete', true); //<= set marker to check in further code $item->outertext=''; foreach($foo as $bar){ if(!baz->getAttribute('softDelete'){ //do something } } } 

这对我有用:

 foreach($html->find('element') as $element){ $element = NULL; } 
Interesting Posts