Side navigation
#4917 closed bug (fixed)
Opened July 17, 2009 11:36PM UTC
Closed December 22, 2009 05:44PM UTC
IE 6/7/8 have bugs related to the Sizzle selector of child elements.
Reported by: | jeffkretz | Owned by: | john |
---|---|---|---|
Priority: | undecided | Milestone: | 1.4 |
Component: | selector | Version: | 1.4a1 |
Keywords: | Problems with children and > selector in IE6/7/8 | Cc: | |
Blocked by: | Blocking: |
Description
Unsurprisingly, these are browser-based bugs specific to IE. The other browsers do not have a problem.
See test case at http://test1.scorpiondesign.com/SelectorDemo.htm
There are 15 child items that should be found using both methods:
div.children('div').children('a');
div.find('>div>a');
In IE6/7, the first method finds 14 items and the second finds only 1 item. Both values are incorrect.
In IE8, the first method finds 14 items and the second method finds 15 items.
I managed to track down the issue with > on IE6/7. It is related to the ">" relative selector which is testing elem.parentNode === part. For whatever reason, IE6/7 is returning true only on the first element. Subsequent elements return false. I test a temporary fix, using == rather than === (identity equals) which helps on that particular selector.
See second test case at http://test1.scorpiondesign.com/SelectorDemo2.htm
Now, IE 6/7/8 all return
div.find('>div>a').length == 15;
But still return
div.children('div').children('a').length == 14;
I stepped through that code and found that the jQuery.sibling function is returning false for the first item, but true for the rest. I was unable to come up with a simple workaround for this problem.
I will leave these pages up for your review.
Jeffrey Kretz
Attachments (0)
Change History (1)
Changed December 22, 2009 05:44PM UTC by comment:1
resolution: | → fixed |
---|---|
status: | new → closed |
version: | 1.3.2 → 1.4a1 |
It looks like this was resolved with the recent nodeName changes in Sizzle:
http://github.com/jeresig/sizzle/commit/0e0177d990c72c00aa16ee8ca8bf96630d46726f