我正在使用Simple HTML DOM
,我正在尝试获取一个包含ID和一组类的元素,如下所示:
<div id="leadtxt" class="caption"></div>
foreach($html->find('div #leadtxt .caption', 0) as $element)
echo $element->outertext;
根据文档,这应该为我提供ID为#leadtxt
并且还有.caption
类的div
问题是它没有。我该怎么写呢?
答案 0 :(得分:1)
您的代码将尝试在ID为caption
的元素 中找到类leadtxt
的元素。由于您有ID,并且ID必须是唯一的,因此简单地使用它会更有意义:
$html->find('#leadtxt', 0)
你问题的确切答案是:
$html->find('div#leadtxt.caption', 0)
请注意缺少空格 - 它会找到ID为leadtxt
的div元素和caption
类。但同样,这是多余的,上述方法会更好,更有可能更快。
编辑:这里有一些进一步的例子,因为我不清楚你到底想要做什么。
以下内容将查找ID为leadtxt
或的所有元素caption
的类:
$html->find('#leadtxt, .caption')
// OR specify the fact you only want DIV elements...
$html->find('div#leadtxt, div.caption')
这将指定您想要具有任何给定类(一个或多个)的元素:
$html->find('.classone, .classtwo, .classthree')
// OR just the DIV elements with any of these classes:
$html->find('div.classone, div.classtwo, div.classthree')
这将指定具有所有给定类的任何元素:
$html->find('.classone.classtwo.classthree')
// OR again, just DIV elements...
$html->find('div.classone.classtwo.classthree')
编辑2:正如您已经说过的,只要您提供一个指定多个类/ ID的选择器,似乎简单的HTML DOM就会失败。我只能假设这是图书馆中尚未解决的弱点。这是一种耻辱,因为它意味着不使用上面给出的标准CSS选择器,尽管声称。
答案 1 :(得分:1)
Mark Embling说他的方法应该有效,但事实并非如此,因为简单的不是一个非常好的库。 这些都应该有效:
$html->find('div#leadtxt[class="caption"]', 0);
$html->find('div.caption[id="leadtxt"]', 0);
或者你可以考虑切换到phpquery