Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Avoid cache collisions with other Sizzles. Fixes #8539.

  • Loading branch information...
commit f56f1784961a63f4118e43b1441ffc2f32ef5d41 1 parent 3ffd629
@timmywil timmywil authored
Showing with 18 additions and 14 deletions.
  1. +17 −13 sizzle.js
  2. +1 −1  test/unit/selector.js
View
30 sizzle.js
@@ -7,6 +7,7 @@
(function(){
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ expando = "sizcache" + (Math.random() + '').replace('.', ''),
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
@@ -772,7 +773,10 @@ var Expr = Sizzle.selectors = {
},
CHILD: function( elem, match ) {
- var type = match[1],
+ var first, last,
+ doneName, parent, cache,
+ count, diff,
+ type = match[1],
node = elem;
switch ( type ) {
@@ -800,18 +804,18 @@ var Expr = Sizzle.selectors = {
return true;
case "nth":
- var first = match[2],
- last = match[3];
+ first = match[2];
+ last = match[3];
if ( first === 1 && last === 0 ) {
return true;
}
- var doneName = match[0],
- parent = elem.parentNode;
+ doneName = match[0];
+ parent = elem.parentNode;
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
+ if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+ count = 0;
for ( node = parent.firstChild; node; node = node.nextSibling ) {
if ( node.nodeType === 1 ) {
@@ -819,10 +823,10 @@ var Expr = Sizzle.selectors = {
}
}
- parent.sizcache = doneName;
+ parent[ expando ] = doneName;
}
- var diff = elem.nodeIndex - last;
+ diff = elem.nodeIndex - last;
if ( first === 0 ) {
return diff === 0;
@@ -1320,13 +1324,13 @@ function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
elem = elem[dir];
while ( elem ) {
- if ( elem.sizcache === doneName ) {
+ if ( elem[ expando ] === doneName ) {
match = checkSet[elem.sizset];
break;
}
if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
+ elem[ expando ] = doneName;
elem.sizset = i;
}
@@ -1353,14 +1357,14 @@ function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
elem = elem[dir];
while ( elem ) {
- if ( elem.sizcache === doneName ) {
+ if ( elem[ expando ] === doneName ) {
match = checkSet[elem.sizset];
break;
}
if ( elem.nodeType === 1 ) {
if ( !isXML ) {
- elem.sizcache = doneName;
+ elem[ expando ] = doneName;
elem.sizset = i;
}
View
2  test/unit/selector.js
@@ -197,7 +197,7 @@ test("name", function() {
t( "Name selector non-input", "[name=div]", ["fadein"] );
t( "Name selector non-input", "*[name=iframe]", ["iframe"] );
- t( "Name selector for grouped input", "input[name='types[]']", ["types_all", "types_anime", "types_movie"] )
+ t( "Name selector for grouped input", "input[name='types[]']", ["types_all", "types_anime", "types_movie"] );
same( jQuery("#form").find("input[name=action]").get(), q("text1"), "Name selector within the context of another element" );
same( jQuery("#form").find("input[name='foo[bar]']").get(), q("hidden2"), "Name selector for grouped form element within the context of another element" );
Please sign in to comment.
Something went wrong with that request. Please try again.