Skip to content

html5qp('<p><span>foo</span></p>')->is('span') returns true #51

Closed

Description

@rulatir

Guidelines

Description of the bug

As demonstrated by this failing test:

    public function testIsDepth() : void
    {
        $dom = html5qp('<p><span>foo</span></p>');
        self::assertTrue($dom->is('p'), "Should match element held directly in the collection");
        self::assertFalse($dom->is('span'), "Should not match a descendant of element held in the collection");
    }

->is($selector) will return true if any descendant of an element held in the collection matches the selector. This diverges from jQuery specification, as evidenced by this filddle, and IMO that makes ->is() useless. At the very least, the original functionality of jQuery's .is() should be provided somehow.

QueryPath version

3.2.3

PHP Version and environment (server type, cli provider etc., enclosing libraries and their respective versions)

8.3.4 (cli) on up-to-date Arch Linux

Minimal reproducible PHP+HTML snippet to replicate bug

echo html5qp('<p><span>foo</span></p>')->is('span') ? "Is, but shouldn't be\n" : "Isn't, and that's fine\n";

Activity

  1. jakejackson1 commented on Apr 10, 2024

    @jakejackson1
    Member

    Thank you for reporting this issue @rulatir. I agree that is() should act like the jQuery equivalent (where possible). It looks like QueryPath's ->is($selector) currently works like ->has($selector), but returns a boolean.

  2. added 2 commits that reference this issue on Oct 26, 2026
    1c6670e
    04da80b
  3. added a commit that references this issue on Oct 26, 2026
    abdfc24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions