0

私はSimpleを使用しHTML DOMており、IDと次のような一連のクラスの両方を保持する特定の要素を取得しようとしています:

<div id="leadtxt" class="caption"></div>

foreach($html->find('div #leadtxt .caption', 0) as $element) 
       echo $element->outertext;

ドキュメントによると、これにより、id#leadtxtとクラスを持つ div が取得されるはずです.caption 。問題は、そうでないことです。これはどう書けばいいですか?

4

2 に答える 2

1

コードは、ID の要素caption で、クラスが の要素を見つけようとしますleadtxt。ID があり、ID は一意である必要があるため、単純にそれを使用する方が理にかなっています。

$html->find('#leadtxt', 0)

あなたの質問に対する正確な答えは次のとおりです。

$html->find('div#leadtxt.caption', 0)

スペースが不足していることに注意してください。ID がleadtxtでクラスがの div 要素が見つかりますcaption。しかし、繰り返しになりますが、これは冗長であり、上記のアプローチの方が優れており、おそらくより高速です。

編集:あなたがやろうとしていることを正確に理解していないので、ここにいくつかの例を示します。

leadtxt 次の例では、IDまたはクラスが であるすべての要素が検索されますcaption

$html->find('#leadtxt, .caption')
// OR specify the fact you only want DIV elements...
$html->find('div#leadtxt, div.caption')

これは、指定されたクラス (1 つ以上) のいずれかを持つ要素が必要であることを指定します。

$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 を一緒に指定するセレクターを提供するたびに、Simple HTML DOM が失敗するようです。これは、まだ対処されていないライブラリの弱点であるとしか思えません。と主張しているにもかかわらず、上記の標準 CSS セレクターでは機能しないことを意味するため、残念です。

于 2013-08-03T08:38:14.393 に答える
1

Mark Embling は、彼のアプローチが機能することは正しいですが、単純なライブラリはあまり優れていないため、機能しません。これらのいずれかが機能するはずです。

$html->find('div#leadtxt[class="caption"]', 0);
$html->find('div.caption[id="leadtxt"]', 0);

あるいは、phpquery への切り替えを検討することもできます

于 2013-08-04T01:16:50.423 に答える