Fixed an issue with :nth-child selectors embedded in :not() filters. Fixes jQuery bug #4156.
This commit is contained in:
parent
a720bb31ab
commit
8533da939d
|
@ -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 = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
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 = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
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() {
|
||||||
});
|
});
|
||||||
|
|
||||||
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() {
|
||||||
|
|
||||||
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>");
|
||||||
|
|
Loading…
Reference in a new issue