Как найти имя тега с помощью phpquery?

Я использую phpquery для извлечения некоторых данных с веб-страницы. Мне нужно определить меню страницы. Моя реализация состоит в том, чтобы найти каждый элемент, у которого есть братья > 0, а последний дочерний элемент — это "a". Мой код:

foreach($this->doc['*'] as $tagObj){
$tag = pq($tagObj);
if(count($tag->siblings()) > 0){
    if($tag->find(":last-child")->tagName  === "a")
        echo trim(strip_tags($tag->html())) . "<br/>";
    }
}

Однако я не получаю никакого вывода из-за

$tag->find(":last-child")->tagName

который ничего не возвращает. Что может быть причиной этого?


person Ahmad    schedule 27.07.2015    source источник


Ответы (4)


Я не знаю эту библиотеку, но, возможно, что-то вроде этого

$siblings = $tag->siblings();
if (($siblingCount = count($siblings)) && $siblings[$siblingCount - 1]->tagName === 'a') {
    echo ...
}
person Phil    schedule 30.07.2015

Вы можете сделать это в обратной проверке для a:last-child :

Например :

foreach($this->doc['*'] as $tagObj){
$tag = pq($tagObj);
if(count($tag->siblings()) > 0){
    if($tag->find("a:last-child"))
        echo trim(strip_tags($tag->html())) . "<br/>";
    }
}

Это проверит тег a для last-child, и вы сможете легко получить его содержимое. Пусть это поможет вам.

person Bhavin Solanki    schedule 05.08.2015

Возможно, вам следует использовать :last вместо :last-child.

Согласно странице библиотеки Google:

$li = null;
$doc['ul > li']
        ->addClass('my-new-class')
        ->filter(':last') // <--- :last
                ->addClass('last-li')
// save it anywhere in the chain
                ->toReference($li);
person Kalimah    schedule 04.08.2015

Поскольку phpQueryObject, возвращаемый pq, реализует Iterator и использует общедоступный массив $elements для хранения всех элементов, нам нужно получить элемент с помощью функции get(), которая возвращает DOMElement со свойствами tagName и nodeName:

$q = phpQuery::newDocumentHTML('<div><span class="test-span">Testing test</span></div>');
echo $q->find('.test-span')->get(0)->tagName; // outputs "span"
//echo $q->find('.test-span')->get(0)->nodeName; // outputs "span"

Оба свойства выводят имя тега с классом test-span, который, конечно же, span.

person Christos Lytras    schedule 17.10.2016