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

Я использую phpquery для извлечения некоторых данных с веб-страницы. Мне нужно определить меню страницы. Моя реализация заключается в том, чтобы найти каждый элемент с сибилизациями > 0, а last-child - "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- > найти ( ": последний-ребенок" ) → тэгу

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Вы можете сделать это с обратной проверкой на 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, и вы можете легко получить его содержимое. Пусть это поможет вам.

Ответ 4

Поскольку 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.