Skip to main content

Bug Tracker

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 john comment:1

resolution: → fixed
status: newclosed
version: 1.3.21.4a1

It looks like this was resolved with the recent nodeName changes in Sizzle:

http://github.com/jeresig/sizzle/commit/0e0177d990c72c00aa16ee8ca8bf96630d46726f