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

kas*_*kka 36 php dom simple-html-dom

我想使用Simple HTML DOM删除文章中的所有图像,这样我就可以轻松地为新闻自动收录器创建一小段文本,但我还没想出如何用它删除元素.

基本上我会这样做

  1. 获取HTML字符串的内容
  2. 从内容中删除所有图像标记
  3. 将内容限制为x个单词
  4. 输出.

有帮助吗?

Gor*_*don 51

没有专门的方法来删除元素.你只需找到所有的img元素然后再做

$e->outertext = '';
Run Code Online (Sandbox Code Playgroud)


小智 28

当您只删除外部文本时,您将删除HTML内容本身,但如果您对相同的元素执行另一次查找,它将显示在结果中.原因是简单的HTML DOM对象仍然具有元素的内部结构,只是没有它的实际内容.为了真正删除元素,您需要做的只是将HTML作为字符串重新加载到同一个变量中.这样,将在没有删除内容的情况下重新创建对象,并且将在没有它的情况下构建简单的HTML DOM对象.

这是一个示例函数:

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

    $this->load($this->save());        
}
Run Code Online (Sandbox Code Playgroud)

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

  • 图书馆的好补充.但是有一个错误,$ html没有在类中定义,它通常是$ html = new simple_html_dom()所以它需要用$ this替换为"foreach($ this-> find($ selector)as $ node") ".我已经提交了一个编辑. (3认同)

Sid*_*Sid 12

我认为你有一些困难,因为你忘了保存(将内部DOM树转储回字符串).

试试这个:

$html = file_get_html("http://example.com");

foreach($html ->find('img') as $item) {
    $item->outertext = '';
    }

$html->save();

echo $html;
Run Code Online (Sandbox Code Playgroud)


Jas*_*seC 5

我不知道把这个函数放在哪里,所以我直接把以下内容放在我的代码中:

$html->load($html->save());
Run Code Online (Sandbox Code Playgroud)

它基本上将 for 循环中所做的更改锁定回上面的 html。