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

This commit is contained in:
John Resig 2009-02-16 17:58:33 +00:00
parent a720bb31ab
commit 8533da939d
2 changed files with 22 additions and 21 deletions

View file

@ -422,7 +422,7 @@ var Expr = Sizzle.selectors = {
}
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;
}
@ -519,6 +519,25 @@ var Expr = Sizzle.selectors = {
}
},
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){
var type = match[1], node = elem;
switch (type) {
@ -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){
return elem.nodeType === 1 && elem.getAttribute("id") === match;
},