Commit 8533da93 authored by John Resig's avatar John Resig

Fixed an issue with :nth-child selectors embedded in :not() filters. Fixes jQuery bug #4156.

parent a720bb31
...@@ -422,7 +422,7 @@ var Expr = Sizzle.selectors = { ...@@ -422,7 +422,7 @@ var Expr = Sizzle.selectors = {
} }
return false; return false;
} }
} else if ( Expr.match.POS.test( match[0] ) ) { } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
return true; return true;
} }
...@@ -519,6 +519,25 @@ var Expr = Sizzle.selectors = { ...@@ -519,6 +519,25 @@ var Expr = Sizzle.selectors = {
} }
}, },
filter: { filter: {
PSEUDO: function(elem, match, i, array){
var name = match[1], filter = Expr.filters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
} else if ( name === "contains" ) {
return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
} else if ( name === "not" ) {
var not = match[3];
for ( var i = 0, l = not.length; i < l; i++ ) {
if ( not[i] === elem ) {
return false;
}
}
return true;
}
},
CHILD: function(elem, match){ CHILD: function(elem, match){
var type = match[1], node = elem; var type = match[1], node = elem;
switch (type) { switch (type) {
...@@ -562,25 +581,6 @@ var Expr = Sizzle.selectors = { ...@@ -562,25 +581,6 @@ var Expr = Sizzle.selectors = {
} }
} }
}, },
PSEUDO: function(elem, match, i, array){
var name = match[1], filter = Expr.filters[ name ];
if ( filter ) {
return filter( elem, i, match, array );
} else if ( name === "contains" ) {
return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
} else if ( name === "not" ) {
var not = match[3];
for ( var i = 0, l = not.length; i < l; i++ ) {
if ( not[i] === elem ) {
return false;
}
}
return true;
}
},
ID: function(elem, match){ ID: function(elem, match){
return elem.nodeType === 1 && elem.getAttribute("id") === match; return elem.nodeType === 1 && elem.getAttribute("id") === match;
}, },
......
...@@ -180,7 +180,7 @@ test("multiple", function() { ...@@ -180,7 +180,7 @@ test("multiple", function() {
}); });
test("child and adjacent", function() { test("child and adjacent", function() {
expect(48); expect(49);
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"] ); 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"] );
...@@ -211,6 +211,7 @@ test("child and adjacent", function() { ...@@ -211,6 +211,7 @@ test("child and adjacent", function() {
t( "First Child", "p:first-child", ["firstp","sndp"] ); t( "First Child", "p:first-child", ["firstp","sndp"] );
t( "Nth Child", "p:nth-child(1)", ["firstp","sndp"] ); t( "Nth Child", "p:nth-child(1)", ["firstp","sndp"] );
t( "Not Nth Child", "p:not(:nth-child(1))", ["ap","en","sap","first"] );
// Verify that the child position isn't being cached improperly // Verify that the child position isn't being cached improperly
jQuery("p:first-child").after("<div></div>"); jQuery("p:first-child").after("<div></div>");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment