technosophos / querypath

QueryPath is a PHP library for manipulating XML and HTML. It is designed to work not only with local files, but also with web services and database resources.
http://querypath.org
Other
822 stars 114 forks source link

DOMQuery::is() returns wrong results #198

Open Code-Working opened 6 years ago

Code-Working commented 6 years ago

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

chx commented 5 years ago

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