#11109 closed bug (fixed)
Sizzle: Expr.relative truncates prematurely
| Reported by: | gibson042 | Owned by: | timmywil |
|---|---|---|---|
| Priority: | high | Milestone: | 1.8 |
| Component: | selector | Version: | 1.7.1 |
| Keywords: | Cc: | ||
| Blocked by: | Blocking: |
Description
Work on #10868 revealed this error in oldSizzle: http://jsfiddle.net/JBBM8/
Because Sizzle.selectors.relative functions "return" only a single match, Sizzle can be trapped into a false negative with respect to preceding parts of the full selector when the relative selector tests against multiple elements (e.g., "~" and "").
I'm pretty sure that fixing this will require changing the Sizzle.selectors.relative Extension API to allow "returning" arrays, so I will hold off working on this until the core team weighs in with their comments/approval.
Change History (10)
comment:1 Changed 8 years ago by
comment:2 Changed 8 years ago by
| Resolution: | → duplicate |
|---|---|
| Status: | new → closed |
Can you coordinate with timmywil on this? He's got #10697. I'll mark this one as a dup but really it seems like this should be filed as a Sizzle bug.
comment:4 Changed 7 years ago by
| Component: | unfiled → selector |
|---|---|
| Milestone: | None → 1.next |
| Priority: | undecided → high |
| Resolution: | duplicate |
| Status: | closed → reopened |
Reopening as this was not addressed in the rewrite. Here is another test case that i think is related:
http://jsfiddle.net/timmywil/a6E3V/3/
Also see:
http://javascript.nwbox.com/NWMatcher/release/test/css3-compat/sibling-test.html
comment:5 Changed 7 years ago by
| Owner: | set to timmywil |
|---|---|
| Status: | reopened → assigned |
comment:6 Changed 7 years ago by
OK, it seems the sibling issues from nwbox are already fixed, so those aren't related. However, there is still an issue with deeper levels. The fiddles are still valid.
comment:7 Changed 7 years ago by
| Milestone: | 1.next → 1.8 |
|---|
A combination combinator fiddle for the masses: http://jsfiddle.net/timmywil/WSrGh/. Working on it.
comment:8 Changed 7 years ago by
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
comment:9 Changed 7 years ago by
Update Sizzle. Fixes #11109.
Changeset: 8763bec032bc2dc10bf0d6686b820b731b525091

Technical explanation: Given a query like
"A + B ~ C", Sizzle:C, thenSizzle.selectors.relative["~"]to replace each element with the first preceding sibling element matchingB(orfalseif nonexistent), thenSizzle.selectors.relative["+"]to replace each element with the preceding sibling element if it matchesA(orfalseif it doesn't), thenfalsethrough all subsequent stepsThe problem here is that step 2 fails to report back all preceding siblings matching
B, erroneously restricting the input set for subsequent step 3.