GravityPDF / querypath

A fork of QueryPath: a PHP library for HTML(5)/XML querying (CSS 4 or XPath) and processing (like jQuery) with PHP8.3 support
Other
21 stars 2 forks source link

DOMQuery::is() returns wrong results #6

Closed jakejackson1 closed 1 year ago

jakejackson1 commented 1 year ago

From querypath created by Code-Working: technosophos/querypath#198

Hi, I've just found a small bug while using the DOMQuery::is() method with a tag selector.

It seems as if the is() method does not check the matched element itself but all elements below the matched DOM query.

A simple code is this:

$document = html5qp('<a class="blubb" href="blabla"><span class="test"><img><div class="element">Text</div></span></a>');
var_dump($document->find('.element')->parent()->tag());
var_dump($document->find('.element')->parent()->first()->is('img'));

While looking at the code, you would expect a result like this:

string(4) "span"
bool(false)

But, the real result is this:

string(5) "span"
bool(true)

If you remove the <img> tag from the HTML code, it returns false, so this is why I'm guessing that the is() method is traversing through the DOM like the find() method.

Regards
Code-Working

jakejackson1 commented 1 year ago

As a consequence closest which relies on is is completely broken as well.