使用简单 HTML DOM 解析器来 return 所有元素*除了*图像
Use Simple HTML DOM Parser to return all elements *except* images
我正在尝试使用 Simple HTML DOM Parser 查看我的 WordPress post 的内容并将所有图像移动到 post 的末尾,无论它们在哪里在实际 html.
我已经使用以下方法成功隔离了所有图像:
$html = str_get_html(wpautop(get_the_content()));
foreach($html->find('img') as $element) echo $element->src . '<br>';
根据文档。 (这只是根据网站上给出的示例打印图像源,因为我还在试验)。
但是,我无法弄清楚如何找到所有元素 除了 图像 - documentation 有用于查找没有属性的元素的选项,但那不是'似乎不适用。
我可以 select 多个元素,如下所示:
$ret = $html->find('a, p');
...但是我要么不得不猜测要使用哪些标签,要么包括每个不是 img 的标签,这将是一个庞大且不可靠的列表。有什么解决办法吗?
因为我想把图片和内容的主体分开,最简单的就是把它们放到一个数组中,然后从DOM中删除它们,然后再返回它(as suggested here ), 像这样:
$html = str_get_html(wpautop(get_the_content()));
$images = array();
foreach($html->find('img') as $element) :
$images[] = $element->src; // Puts the image source into an array
$element->outertext = ''; // and then removes it from the DOM.
endforeach;
echo $html;
print_r($images);
这只是 returns post 的内容,没有图像,然后显示图像数组,然后我可以 运行 一个 foreach 来显示。
使用 PHP 的 DOM classes,您可以:
$doc = new \DOMDocument();
@$doc->loadHTML(get_the_content());
$xpath = new \DOMXPath($doc);
foreach ($xpath->query('//*[name() != "img"]') as $node) {
// do stuff here
}
我正在尝试使用 Simple HTML DOM Parser 查看我的 WordPress post 的内容并将所有图像移动到 post 的末尾,无论它们在哪里在实际 html.
我已经使用以下方法成功隔离了所有图像:
$html = str_get_html(wpautop(get_the_content()));
foreach($html->find('img') as $element) echo $element->src . '<br>';
根据文档。 (这只是根据网站上给出的示例打印图像源,因为我还在试验)。
但是,我无法弄清楚如何找到所有元素 除了 图像 - documentation 有用于查找没有属性的元素的选项,但那不是'似乎不适用。
我可以 select 多个元素,如下所示:
$ret = $html->find('a, p');
...但是我要么不得不猜测要使用哪些标签,要么包括每个不是 img 的标签,这将是一个庞大且不可靠的列表。有什么解决办法吗?
因为我想把图片和内容的主体分开,最简单的就是把它们放到一个数组中,然后从DOM中删除它们,然后再返回它(as suggested here ), 像这样:
$html = str_get_html(wpautop(get_the_content()));
$images = array();
foreach($html->find('img') as $element) :
$images[] = $element->src; // Puts the image source into an array
$element->outertext = ''; // and then removes it from the DOM.
endforeach;
echo $html;
print_r($images);
这只是 returns post 的内容,没有图像,然后显示图像数组,然后我可以 运行 一个 foreach 来显示。
使用 PHP 的 DOM classes,您可以:
$doc = new \DOMDocument();
@$doc->loadHTML(get_the_content());
$xpath = new \DOMXPath($doc);
foreach ($xpath->query('//*[name() != "img"]') as $node) {
// do stuff here
}