Bug Tracker

Ticket #4344 (closed bug: wontfix)

Opened 6 years ago

Last modified 3 years ago

~, > selector with descendant fails

Reported by: kbae Owned by: john
Priority: high Milestone: 1.next
Component: selector Version: 1.4.4
Keywords: regression Cc:
Blocking: Blocked by:

Description

Using ~ or > selector in combination with a descendant fails in 1.3.2, but works in 1.2.x.

Example: $(' ~ tr.clsName .subClsName', obj)

See attached sample.

Attachments

test.html Download (763 bytes) - added by kbae 6 years ago.

Change History

Changed 6 years ago by kbae

comment:1 Changed 5 years ago by davidserduke

Seems to work in the most recent versions of the browser that have the querySelectorAll() functionality. But in versions without that I think it is a Sizzle problem. So this problem shows in FF3.5 only if you hide the querySelectorAll().

<!DOCTYPE html>
<html>
  <head>
    <title>Tester</title>
    <script type="text/javascript" src="../jquery.js"></script>
    <script type="text/javascript">
      $(function () {
        document.querySelectorAll = undefined;
        var $result = $("body > div span");
        alert($result.length ? "found" : "not found");
      });
    </script>
  </head>
  <body>
    <div id="outside_div">
      <div id="inside_div">
        <span>Howdy</span>
      </div>
    </div>
  </body>
</html>

Near as I can tell (at least in this case) Sizzle works backwards on the query. So with this query:

$("body > div span");

it finds the span first. Then it looks for the nearest div parent which in this case is inside_div. Next it looks to see if body is the direct parent of inside_div which it is not and fails to make a successful connection on that basis.

I suspect to fix this Sizzle would have to keep an array of matching parents found instead of just the closest parent. Then loop over those for the various cases because sometimes you want the closest but others you might not.

All in all doesn't seem like an easy fix.

comment:2 Changed 4 years ago by rwaldron

  • Priority changed from minor to high
  • Status changed from new to open
  • Version changed from 1.3.2 to 1.4.3
  • Milestone changed from 1.4 to 1.4.4

Confirmed;

"Not Found" when using 1.4.4rc1:  http://jsfiddle.net/rwaldron/SKhr8/3/

"Found" with 1.2.6  http://jsfiddle.net/rwaldron/SKhr8/4/

"Note Found" with 1.3.2  http://jsfiddle.net/rwaldron/SKhr8/5/

Incidentally, I would suspect that qSA does not like mixed descendant selectors

comment:3 Changed 4 years ago by snover

  • Keywords regression added
  • Milestone changed from 1.4.4 to 1.4.5

comment:4 Changed 4 years ago by jitter

  • Version changed from 1.4.3 to 1.4.4
  • Milestone changed from 1.4.5 to 1.next

comment:5 Changed 4 years ago by jitter

#8003 is a duplicate of this ticket.

comment:6 Changed 3 years ago by anonymous

is this bug fixed yet?

comment:7 Changed 3 years ago by john

  • Status changed from open to closed
  • Resolution set to wontfix

This does not seem like something that we're going to fix - the result would be prohibitively expensive (both in terms of computation and in terms of file size). Perhaps if we end up rewriting Sizzle at some point we can tackle this issue then.

Version 0, edited 3 years ago by john (next)
Note: See TracTickets for help on using tickets.