2013-08-03 2 views
0

Я использую простой HTML DOM, и я пытаюсь получить определенный элемент, который держит как идентификатор и набор классов, как это:Найти DIV с несколькими классами и идентификатор

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

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

Согласно документации, это должно получить мне div, который имеет id #leadtxt, а также имеет класс .caption Проблема в том, что это не так. Как мне это написать?

ответ

1

Ваш код будет пытаться найти элемент с классом captionв элемент с идентификатором leadtxt. Поскольку у вас есть идентификатор, и идентификаторы должны быть уникальными, было бы больше смысла, чтобы просто использовать, что:

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

Точный ответ на ваш вопрос будет таким:

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

Обратите внимание на отсутствие space - он найдет элемент div с идентификатором leadtxt и классом caption. Но опять же, это избыточно, и вышеупомянутый подход будет лучше и, скорее всего, быстрее.

Редактировать: вот еще несколько примеров, поскольку я не совсем понимаю, что именно вы пытаетесь сделать.

Ниже будет найти все элементы, которые имеют идентификатор 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: Как вы уже сказали, кажется, что Simple HTML DOM не работает, когда вы предоставляете селектор, который задает несколько классов/идентификаторов вместе. Я могу только предположить, что это слабость в библиотеке, которая еще не была рассмотрена. Это позор, так как это означает, что не работает со стандартными CSS-селекторами, указанными выше, несмотря на то, что они требуют.

+0

Я уже пробовал это, он не работает – Youss

+0

Вы пробовали оба подхода? Что происходит? Верхний должен работать, если ваш HTML действительно содержит этот идентификатор (один раз). –

+0

Верхний, очевидно, работает, но его элементы с несколькими ссылками; классы и id. Дайте мне минуту, я сделаю пример по компиляции онлайн – Youss

1

Марк Эмблинг прав, что его подход должен работать, но это не потому, что просто просто не очень хорошая библиотека. Любой из них должен работать:

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

В качестве альтернативы вы могли бы рассмотреть вопрос о переходе на phpquery

Смежные вопросы