查找具有多个类和ID的DIV

时间:2013-08-03 08:34:20

标签: php foreach simple-html-dom

我正在使用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  问题是它没有。我该怎么写呢?

2 个答案:

答案 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