From 626961c4a54cccaae0ecef81f2058cd0888611cc Mon Sep 17 00:00:00 2001 From: John Resig Date: Wed, 21 Jan 2009 22:01:50 +0000 Subject: [PATCH] CHILD positions were being cached improperly. Tweaked it and added a test to make sure it doesn't happen again. Fixes jQuery bug #3924. --- src/selector.js | 2 +- test/unit/selector.js | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/selector.js b/src/selector.js index 6b68cb28..8af3a0db 100644 --- a/src/selector.js +++ b/src/selector.js @@ -495,7 +495,7 @@ var Expr = Sizzle.selectors = { CHILD: function(elem, match){ var type = match[1], parent = elem.parentNode; - var doneName = "child" + parent.childNodes.length; + var doneName = match[0]; if ( parent && (!parent[ doneName ] || !elem.nodeIndex) ) { var count = 1; diff --git a/test/unit/selector.js b/test/unit/selector.js index 4bc15773..4e6feaff 100644 --- a/test/unit/selector.js +++ b/test/unit/selector.js @@ -141,7 +141,7 @@ test("multiple", function() { }); test("child and adjacent", function() { - expect(44); + expect(45); t( "Child", "p > a", ["simon1","google","groups","mark","yahoo","simon"] ); t( "Child", "p> a", ["simon1","google","groups","mark","yahoo","simon"] ); t( "Child", "p >a", ["simon1","google","groups","mark","yahoo","simon"] ); @@ -169,6 +169,14 @@ test("child and adjacent", function() { t( "First Child", "p:first-child", ["firstp","sndp"] ); t( "Nth Child", "p:nth-child(1)", ["firstp","sndp"] ); + + // Verify that the child position isn't being cached improperly + jQuery("p:first-child").after("
"); + jQuery("p:first-child").before("
").next().remove(); + + t( "First Child", "p:first-child", [] ); + + reset(); t( "Last Child", "p:last-child", ["sap"] ); t( "Last Child", "a:last-child", ["simon1","anchor1","mark","yahoo","anchor2","simon"] );