простой html dom: как получить тег без определенного атрибута

Я хочу получить теги с атрибутом "class", равным "someclass", но только те теги, которые не определили атрибут "id".

Я пробовал следующее (на основе этого ответа), но не сработало:

$html->find('.someclass[id!=*]');

Примечание.

Я использую класс Simple HTML DOM, и в базовой документации, которую они дают, я не найти то, что мне нужно.


person leticia    schedule 08.05.2012    source источник
comment
Для селекторов CSS3 попробуйте code.google.com/p/phpquery.   -  person h0tw1r3    schedule 05.10.2012


Ответы (2)


Класс Simple HTML DOM не поддерживает псевдоклассы CSS3, необходимые для сопоставления отрицательных атрибутов.

Ограничение легко обойти без особых проблем.

$nodes = array_filter($html->find('.something'), function($node){return empty($node->id);});
person h0tw1r3    schedule 05.10.2012
comment
Я только что опубликовал аналогичный вопрос, но в своем коде я получаю все элементы с классом, у которого нет определенного набора идентификаторов. Не могли бы вы показать, каким будет возврат, если мне нужно будет проверить id !=some_id Спасибо. - person Anagio; 06.09.2013
comment
Спасибо, я видел, что вы предложили phpquery, который принимает селекторы css3. Есть ли разница в производительности между этим и простым html dom? - person Anagio; 09.09.2013

Из Руководства по синтаксическому анализатору PHP Simple HTML DOM в разделе Как найти элементы HTML? мы можем прочитать:

[!attribute] Соответствует элементам, которые не имеют указанного атрибута.

Ваш код будет выглядеть так:

$html->find('.someclass[!id]');

Это будет соответствовать элементам с классом someClass, которые не имеют атрибута id.


Мой первоначальный ответ был основан на выборе элементов, как и в случае с jQuery, поскольку Simple HTML DOM Parser утверждает, что поддерживает их на их главная страница, где мы можем прочитать:

Найдите теги на HTML-странице с помощью селекторов, как в jQuery.

Приношу искренние извинения тем, кто был оскорблен моим первоначальным ответом и выразил свое недовольство в комментариях!

person Zuul    schedule 08.05.2012
comment
Спасибо, но этот оператор не работает для PHP-кода с использованием класса Simple HTML DOM (см. ссылку на него в моем посте). - person leticia; 09.05.2012
comment
да, это то, что я делаю, но я не уверен, что нет другого решения, спасибо, +1 для вас - person leticia; 09.05.2012
comment
Я проголосовал против, потому что, хотя вы технически правы, вопрос не имеет ничего общего с jquery. - person h0tw1r3; 05.10.2012
comment
@KalleH.Väravas Извините, я обновил ответ решением из документации. - person Zuul; 30.03.2014
comment
@ h0tw1r3 h0tw1r3 Хотя вы можете быть правы в том, что это не связано с jQuery, я использую его как таковой уже много лет и без каких-либо проблем. Их принцип заключается в том, чтобы выбирать элементы с помощью селекторов CSS, как это делает jQuery. В любом случае, я обновил ответ решением проблемы OP, которое также задокументировано в Руководстве по парсеру Simple HTML DOM. - person Zuul; 30.03.2014
comment
Работал отлично! Просто и эффективно. +1 - person Sérgio Passos Jr.; 26.12.2017