mirror of
https://github.com/jquery/jquery.git
synced 2024-10-05 11:34:18 +00:00
Selector: Update Sizzle from 2.3.4 to 2.3.5
Fixes gh-4424 Fixes gh-4435 Fixes gh-4441 Fixes gh-4453 Closes gh-4641
This commit is contained in:
parent
7506c9ca62
commit
04bf577e2f
354
external/sizzle/dist/sizzle.js
vendored
354
external/sizzle/dist/sizzle.js
vendored
@ -1,15 +1,14 @@
|
|||||||
/*!
|
/*!
|
||||||
* Sizzle CSS Selector Engine v2.3.4
|
* Sizzle CSS Selector Engine v2.3.5
|
||||||
* https://sizzlejs.com/
|
* https://sizzlejs.com/
|
||||||
*
|
*
|
||||||
* Copyright JS Foundation and other contributors
|
* Copyright JS Foundation and other contributors
|
||||||
* Released under the MIT license
|
* Released under the MIT license
|
||||||
* https://js.foundation/
|
* https://js.foundation/
|
||||||
*
|
*
|
||||||
* Date: 2019-04-08
|
* Date: 2020-03-14
|
||||||
*/
|
*/
|
||||||
( function( window ) {
|
( function( window ) {
|
||||||
|
|
||||||
var i,
|
var i,
|
||||||
support,
|
support,
|
||||||
Expr,
|
Expr,
|
||||||
@ -52,9 +51,10 @@ var i,
|
|||||||
hasOwn = ( {} ).hasOwnProperty,
|
hasOwn = ( {} ).hasOwnProperty,
|
||||||
arr = [],
|
arr = [],
|
||||||
pop = arr.pop,
|
pop = arr.pop,
|
||||||
push_native = arr.push,
|
pushNative = arr.push,
|
||||||
push = arr.push,
|
push = arr.push,
|
||||||
slice = arr.slice,
|
slice = arr.slice,
|
||||||
|
|
||||||
// Use a stripped-down indexOf as it's faster than native
|
// Use a stripped-down indexOf as it's faster than native
|
||||||
// https://jsperf.com/thor-indexof-vs-for/5
|
// https://jsperf.com/thor-indexof-vs-for/5
|
||||||
indexOf = function( list, elem ) {
|
indexOf = function( list, elem ) {
|
||||||
@ -68,40 +68,50 @@ var i,
|
|||||||
return -1;
|
return -1;
|
||||||
},
|
},
|
||||||
|
|
||||||
booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
|
booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" +
|
||||||
|
"ismap|loop|multiple|open|readonly|required|scoped",
|
||||||
|
|
||||||
// Regular expressions
|
// Regular expressions
|
||||||
|
|
||||||
// http://www.w3.org/TR/css3-selectors/#whitespace
|
// http://www.w3.org/TR/css3-selectors/#whitespace
|
||||||
whitespace = "[\\x20\\t\\r\\n\\f]",
|
whitespace = "[\\x20\\t\\r\\n\\f]",
|
||||||
|
|
||||||
// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
|
// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram
|
||||||
identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
|
identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace +
|
||||||
|
"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",
|
||||||
|
|
||||||
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
|
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
|
||||||
attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
|
attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
|
||||||
|
|
||||||
// Operator (capture 2)
|
// Operator (capture 2)
|
||||||
"*([*^$|!~]?=)" + whitespace +
|
"*([*^$|!~]?=)" + whitespace +
|
||||||
// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
|
|
||||||
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
|
// "Attribute values must be CSS identifiers [capture 5]
|
||||||
"*\\]",
|
// or strings [capture 3 or capture 4]"
|
||||||
|
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" +
|
||||||
|
whitespace + "*\\]",
|
||||||
|
|
||||||
pseudos = ":(" + identifier + ")(?:\\((" +
|
pseudos = ":(" + identifier + ")(?:\\((" +
|
||||||
|
|
||||||
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
|
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
|
||||||
// 1. quoted (capture 3; capture 4 or capture 5)
|
// 1. quoted (capture 3; capture 4 or capture 5)
|
||||||
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
|
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
|
||||||
|
|
||||||
// 2. simple (capture 6)
|
// 2. simple (capture 6)
|
||||||
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
|
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
|
||||||
|
|
||||||
// 3. anything else (capture 2)
|
// 3. anything else (capture 2)
|
||||||
".*" +
|
".*" +
|
||||||
")\\)|)",
|
")\\)|)",
|
||||||
|
|
||||||
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
|
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
|
||||||
rwhitespace = new RegExp( whitespace + "+", "g" ),
|
rwhitespace = new RegExp( whitespace + "+", "g" ),
|
||||||
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
|
rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" +
|
||||||
|
whitespace + "+$", "g" ),
|
||||||
|
|
||||||
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
|
||||||
rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
|
rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace +
|
||||||
|
"*" ),
|
||||||
rdescend = new RegExp( whitespace + "|>" ),
|
rdescend = new RegExp( whitespace + "|>" ),
|
||||||
|
|
||||||
rpseudo = new RegExp( pseudos ),
|
rpseudo = new RegExp( pseudos ),
|
||||||
@ -113,14 +123,16 @@ var i,
|
|||||||
"TAG": new RegExp( "^(" + identifier + "|[*])" ),
|
"TAG": new RegExp( "^(" + identifier + "|[*])" ),
|
||||||
"ATTR": new RegExp( "^" + attributes ),
|
"ATTR": new RegExp( "^" + attributes ),
|
||||||
"PSEUDO": new RegExp( "^" + pseudos ),
|
"PSEUDO": new RegExp( "^" + pseudos ),
|
||||||
"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
|
"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" +
|
||||||
"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
|
whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" +
|
||||||
"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
|
whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
|
||||||
"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
|
"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
|
||||||
|
|
||||||
// For use in libraries implementing .is()
|
// For use in libraries implementing .is()
|
||||||
// We use this for POS matching in `select`
|
// We use this for POS matching in `select`
|
||||||
"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
|
"needsContext": new RegExp( "^" + whitespace +
|
||||||
whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
|
"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
|
||||||
|
"*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
|
||||||
},
|
},
|
||||||
|
|
||||||
rhtml = /HTML$/i,
|
rhtml = /HTML$/i,
|
||||||
@ -136,18 +148,21 @@ var i,
|
|||||||
|
|
||||||
// CSS escapes
|
// CSS escapes
|
||||||
// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
|
// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
|
||||||
runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
|
runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ),
|
||||||
funescape = function( _, escaped, escapedWhitespace ) {
|
funescape = function( escape, nonHex ) {
|
||||||
var high = "0x" + escaped - 0x10000;
|
var high = "0x" + escape.slice( 1 ) - 0x10000;
|
||||||
// NaN means non-codepoint
|
|
||||||
// Support: Firefox<24
|
return nonHex ?
|
||||||
// Workaround erroneous numeric interpretation of +"0x"
|
|
||||||
return high !== high || escapedWhitespace ?
|
// Strip the backslash prefix from a non-hex escape sequence
|
||||||
escaped :
|
nonHex :
|
||||||
|
|
||||||
|
// Replace a hexadecimal escape sequence with the encoded Unicode code point
|
||||||
|
// Support: IE <=11+
|
||||||
|
// For values outside the Basic Multilingual Plane (BMP), manually construct a
|
||||||
|
// surrogate pair
|
||||||
high < 0 ?
|
high < 0 ?
|
||||||
// BMP codepoint
|
|
||||||
String.fromCharCode( high + 0x10000 ) :
|
String.fromCharCode( high + 0x10000 ) :
|
||||||
// Supplemental Plane codepoint (surrogate pair)
|
|
||||||
String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
|
String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -163,7 +178,8 @@ var i,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Control characters and (dependent upon position) numbers get escaped as code points
|
// Control characters and (dependent upon position) numbers get escaped as code points
|
||||||
return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
|
return ch.slice( 0, -1 ) + "\\" +
|
||||||
|
ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Other potentially-special ASCII characters get backslash-escaped
|
// Other potentially-special ASCII characters get backslash-escaped
|
||||||
@ -191,15 +207,17 @@ try {
|
|||||||
( arr = slice.call( preferredDoc.childNodes ) ),
|
( arr = slice.call( preferredDoc.childNodes ) ),
|
||||||
preferredDoc.childNodes
|
preferredDoc.childNodes
|
||||||
);
|
);
|
||||||
|
|
||||||
// Support: Android<4.0
|
// Support: Android<4.0
|
||||||
// Detect silently failing push.apply
|
// Detect silently failing push.apply
|
||||||
|
// eslint-disable-next-line no-unused-expressions
|
||||||
arr[ preferredDoc.childNodes.length ].nodeType;
|
arr[ preferredDoc.childNodes.length ].nodeType;
|
||||||
} catch ( e ) {
|
} catch ( e ) {
|
||||||
push = { apply: arr.length ?
|
push = { apply: arr.length ?
|
||||||
|
|
||||||
// Leverage slice if possible
|
// Leverage slice if possible
|
||||||
function( target, els ) {
|
function( target, els ) {
|
||||||
push_native.apply( target, slice.call(els) );
|
pushNative.apply( target, slice.call( els ) );
|
||||||
} :
|
} :
|
||||||
|
|
||||||
// Support: IE<9
|
// Support: IE<9
|
||||||
@ -207,6 +225,7 @@ try {
|
|||||||
function( target, els ) {
|
function( target, els ) {
|
||||||
var j = target.length,
|
var j = target.length,
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
// Can't trust NodeList.length
|
// Can't trust NodeList.length
|
||||||
while ( ( target[ j++ ] = els[ i++ ] ) ) {}
|
while ( ( target[ j++ ] = els[ i++ ] ) ) {}
|
||||||
target.length = j - 1;
|
target.length = j - 1;
|
||||||
@ -232,10 +251,7 @@ function Sizzle( selector, context, results, seed ) {
|
|||||||
|
|
||||||
// Try to shortcut find operations (as opposed to filters) in HTML documents
|
// Try to shortcut find operations (as opposed to filters) in HTML documents
|
||||||
if ( !seed ) {
|
if ( !seed ) {
|
||||||
|
|
||||||
if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
|
|
||||||
setDocument( context );
|
setDocument( context );
|
||||||
}
|
|
||||||
context = context || document;
|
context = context || document;
|
||||||
|
|
||||||
if ( documentIsHTML ) {
|
if ( documentIsHTML ) {
|
||||||
@ -307,8 +323,19 @@ function Sizzle( selector, context, results, seed ) {
|
|||||||
// descendant combinators, which is not what we want.
|
// descendant combinators, which is not what we want.
|
||||||
// In such cases, we work around the behavior by prefixing every selector in the
|
// In such cases, we work around the behavior by prefixing every selector in the
|
||||||
// list with an ID selector referencing the scope context.
|
// list with an ID selector referencing the scope context.
|
||||||
|
// The technique has to be used as well when a leading combinator is used
|
||||||
|
// as such selectors are not recognized by querySelectorAll.
|
||||||
// Thanks to Andrew Dupont for this technique.
|
// Thanks to Andrew Dupont for this technique.
|
||||||
if ( nodeType === 1 && rdescend.test( selector ) ) {
|
if ( nodeType === 1 &&
|
||||||
|
( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {
|
||||||
|
|
||||||
|
// Expand context for sibling selectors
|
||||||
|
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
||||||
|
context;
|
||||||
|
|
||||||
|
// We can use :scope instead of the ID hack if the browser
|
||||||
|
// supports it & if we're not changing the context.
|
||||||
|
if ( newContext !== context || !support.scope ) {
|
||||||
|
|
||||||
// Capture the context ID, setting it first if necessary
|
// Capture the context ID, setting it first if necessary
|
||||||
if ( ( nid = context.getAttribute( "id" ) ) ) {
|
if ( ( nid = context.getAttribute( "id" ) ) ) {
|
||||||
@ -316,18 +343,16 @@ function Sizzle( selector, context, results, seed ) {
|
|||||||
} else {
|
} else {
|
||||||
context.setAttribute( "id", ( nid = expando ) );
|
context.setAttribute( "id", ( nid = expando ) );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Prefix every selector in the list
|
// Prefix every selector in the list
|
||||||
groups = tokenize( selector );
|
groups = tokenize( selector );
|
||||||
i = groups.length;
|
i = groups.length;
|
||||||
while ( i-- ) {
|
while ( i-- ) {
|
||||||
groups[i] = "#" + nid + " " + toSelector( groups[i] );
|
groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " +
|
||||||
|
toSelector( groups[ i ] );
|
||||||
}
|
}
|
||||||
newSelector = groups.join( "," );
|
newSelector = groups.join( "," );
|
||||||
|
|
||||||
// Expand context for sibling selectors
|
|
||||||
newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
|
|
||||||
context;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -360,8 +385,10 @@ function createCache() {
|
|||||||
var keys = [];
|
var keys = [];
|
||||||
|
|
||||||
function cache( key, value ) {
|
function cache( key, value ) {
|
||||||
|
|
||||||
// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
|
// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
|
||||||
if ( keys.push( key + " " ) > Expr.cacheLength ) {
|
if ( keys.push( key + " " ) > Expr.cacheLength ) {
|
||||||
|
|
||||||
// Only keep the most recent entries
|
// Only keep the most recent entries
|
||||||
delete cache[ keys.shift() ];
|
delete cache[ keys.shift() ];
|
||||||
}
|
}
|
||||||
@ -391,10 +418,12 @@ function assert( fn ) {
|
|||||||
} catch ( e ) {
|
} catch ( e ) {
|
||||||
return false;
|
return false;
|
||||||
} finally {
|
} finally {
|
||||||
|
|
||||||
// Remove from its parent by default
|
// Remove from its parent by default
|
||||||
if ( el.parentNode ) {
|
if ( el.parentNode ) {
|
||||||
el.parentNode.removeChild( el );
|
el.parentNode.removeChild( el );
|
||||||
}
|
}
|
||||||
|
|
||||||
// release memory in IE
|
// release memory in IE
|
||||||
el = null;
|
el = null;
|
||||||
}
|
}
|
||||||
@ -579,7 +608,11 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
doc = node ? node.ownerDocument || node : preferredDoc;
|
doc = node ? node.ownerDocument || node : preferredDoc;
|
||||||
|
|
||||||
// Return early if doc is invalid or already selected
|
// Return early if doc is invalid or already selected
|
||||||
if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {
|
||||||
return document;
|
return document;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -588,9 +621,13 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
docElem = document.documentElement;
|
docElem = document.documentElement;
|
||||||
documentIsHTML = !isXML( document );
|
documentIsHTML = !isXML( document );
|
||||||
|
|
||||||
// Support: IE 9-11, Edge
|
// Support: IE 9 - 11+, Edge 12 - 18+
|
||||||
// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
|
// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
|
||||||
if ( preferredDoc !== document &&
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
if ( preferredDoc != document &&
|
||||||
( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
|
( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {
|
||||||
|
|
||||||
// Support: IE 11, Edge
|
// Support: IE 11, Edge
|
||||||
@ -603,6 +640,17 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,
|
||||||
|
// Safari 4 - 5 only, Opera <=11.6 - 12.x only
|
||||||
|
// IE/Edge & older browsers don't support the :scope pseudo-class.
|
||||||
|
// Support: Safari 6.0 only
|
||||||
|
// Safari 6.0 supports :scope but it's an alias of :root there.
|
||||||
|
support.scope = assert( function( el ) {
|
||||||
|
docElem.appendChild( el ).appendChild( document.createElement( "div" ) );
|
||||||
|
return typeof el.querySelectorAll !== "undefined" &&
|
||||||
|
!el.querySelectorAll( ":scope fieldset div" ).length;
|
||||||
|
} );
|
||||||
|
|
||||||
/* Attributes
|
/* Attributes
|
||||||
---------------------------------------------------------------------- */
|
---------------------------------------------------------------------- */
|
||||||
|
|
||||||
@ -706,6 +754,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
var elem,
|
var elem,
|
||||||
tmp = [],
|
tmp = [],
|
||||||
i = 0,
|
i = 0,
|
||||||
|
|
||||||
// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
|
// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
|
||||||
results = context.getElementsByTagName( tag );
|
results = context.getElementsByTagName( tag );
|
||||||
|
|
||||||
@ -745,9 +794,13 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
rbuggyQSA = [];
|
rbuggyQSA = [];
|
||||||
|
|
||||||
if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
|
if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {
|
||||||
|
|
||||||
// Build QSA regex
|
// Build QSA regex
|
||||||
// Regex strategy adopted from Diego Perini
|
// Regex strategy adopted from Diego Perini
|
||||||
assert( function( el ) {
|
assert( function( el ) {
|
||||||
|
|
||||||
|
var input;
|
||||||
|
|
||||||
// Select is set to empty string on purpose
|
// Select is set to empty string on purpose
|
||||||
// This is to test IE's treatment of not explicitly
|
// This is to test IE's treatment of not explicitly
|
||||||
// setting a boolean content attribute,
|
// setting a boolean content attribute,
|
||||||
@ -776,6 +829,19 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
rbuggyQSA.push( "~=" );
|
rbuggyQSA.push( "~=" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Support: IE 11+, Edge 15 - 18+
|
||||||
|
// IE 11/Edge don't find elements on a `[name='']` query in some cases.
|
||||||
|
// Adding a temporary attribute to the document before the selection works
|
||||||
|
// around the issue.
|
||||||
|
// Interestingly, IE 10 & older don't seem to have the issue.
|
||||||
|
input = document.createElement( "input" );
|
||||||
|
input.setAttribute( "name", "" );
|
||||||
|
el.appendChild( input );
|
||||||
|
if ( !el.querySelectorAll( "[name='']" ).length ) {
|
||||||
|
rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" +
|
||||||
|
whitespace + "*(?:''|\"\")" );
|
||||||
|
}
|
||||||
|
|
||||||
// Webkit/Opera - :checked should return selected option elements
|
// Webkit/Opera - :checked should return selected option elements
|
||||||
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
||||||
// IE8 throws error here and will not see later tests
|
// IE8 throws error here and will not see later tests
|
||||||
@ -789,6 +855,11 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
|
if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
|
||||||
rbuggyQSA.push( ".#.+[+~]" );
|
rbuggyQSA.push( ".#.+[+~]" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Support: Firefox <=3.6 - 5 only
|
||||||
|
// Old Firefox doesn't throw on a badly-escaped identifier.
|
||||||
|
el.querySelectorAll( "\\\f" );
|
||||||
|
rbuggyQSA.push( "[\\r\\n\\f]" );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
assert( function( el ) {
|
assert( function( el ) {
|
||||||
@ -820,6 +891,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
rbuggyQSA.push( ":enabled", ":disabled" );
|
rbuggyQSA.push( ":enabled", ":disabled" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Support: Opera 10 - 11 only
|
||||||
// Opera 10-11 does not throw on post-comma invalid pseudos
|
// Opera 10-11 does not throw on post-comma invalid pseudos
|
||||||
el.querySelectorAll( "*,:x" );
|
el.querySelectorAll( "*,:x" );
|
||||||
rbuggyQSA.push( ",.*:" );
|
rbuggyQSA.push( ",.*:" );
|
||||||
@ -833,6 +905,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
docElem.msMatchesSelector ) ) ) ) {
|
docElem.msMatchesSelector ) ) ) ) {
|
||||||
|
|
||||||
assert( function( el ) {
|
assert( function( el ) {
|
||||||
|
|
||||||
// Check to see if it's possible to do matchesSelector
|
// Check to see if it's possible to do matchesSelector
|
||||||
// on a disconnected node (IE 9)
|
// on a disconnected node (IE 9)
|
||||||
support.disconnectedMatch = matches.call( el, "*" );
|
support.disconnectedMatch = matches.call( el, "*" );
|
||||||
@ -895,7 +968,11 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Calculate position if both inputs belong to the same document
|
// Calculate position if both inputs belong to the same document
|
||||||
compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?
|
||||||
a.compareDocumentPosition( b ) :
|
a.compareDocumentPosition( b ) :
|
||||||
|
|
||||||
// Otherwise we know they are disconnected
|
// Otherwise we know they are disconnected
|
||||||
@ -906,10 +983,21 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
|
( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {
|
||||||
|
|
||||||
// Choose the first element that is related to our preferred document
|
// Choose the first element that is related to our preferred document
|
||||||
if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
if ( a == document || a.ownerDocument == preferredDoc &&
|
||||||
|
contains( preferredDoc, a ) ) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
|
|
||||||
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
if ( b == document || b.ownerDocument == preferredDoc &&
|
||||||
|
contains( preferredDoc, b ) ) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -922,6 +1010,7 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
return compare & 4 ? -1 : 1;
|
return compare & 4 ? -1 : 1;
|
||||||
} :
|
} :
|
||||||
function( a, b ) {
|
function( a, b ) {
|
||||||
|
|
||||||
// Exit early if the nodes are identical
|
// Exit early if the nodes are identical
|
||||||
if ( a === b ) {
|
if ( a === b ) {
|
||||||
hasDuplicate = true;
|
hasDuplicate = true;
|
||||||
@ -937,8 +1026,14 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
|
|
||||||
// Parentless nodes are either documents or disconnected
|
// Parentless nodes are either documents or disconnected
|
||||||
if ( !aup || !bup ) {
|
if ( !aup || !bup ) {
|
||||||
return a === document ? -1 :
|
|
||||||
b === document ? 1 :
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
/* eslint-disable eqeqeq */
|
||||||
|
return a == document ? -1 :
|
||||||
|
b == document ? 1 :
|
||||||
|
/* eslint-enable eqeqeq */
|
||||||
aup ? -1 :
|
aup ? -1 :
|
||||||
bup ? 1 :
|
bup ? 1 :
|
||||||
sortInput ?
|
sortInput ?
|
||||||
@ -966,12 +1061,18 @@ setDocument = Sizzle.setDocument = function( node ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return i ?
|
return i ?
|
||||||
|
|
||||||
// Do a sibling check if the nodes have a common ancestor
|
// Do a sibling check if the nodes have a common ancestor
|
||||||
siblingCheck( ap[ i ], bp[ i ] ) :
|
siblingCheck( ap[ i ], bp[ i ] ) :
|
||||||
|
|
||||||
// Otherwise nodes in our document sort first
|
// Otherwise nodes in our document sort first
|
||||||
ap[i] === preferredDoc ? -1 :
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
bp[i] === preferredDoc ? 1 :
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
/* eslint-disable eqeqeq */
|
||||||
|
ap[ i ] == preferredDoc ? -1 :
|
||||||
|
bp[ i ] == preferredDoc ? 1 :
|
||||||
|
/* eslint-enable eqeqeq */
|
||||||
0;
|
0;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -983,10 +1084,7 @@ Sizzle.matches = function( expr, elements ) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Sizzle.matchesSelector = function( elem, expr ) {
|
Sizzle.matchesSelector = function( elem, expr ) {
|
||||||
// Set document vars if needed
|
|
||||||
if ( ( elem.ownerDocument || elem ) !== document ) {
|
|
||||||
setDocument( elem );
|
setDocument( elem );
|
||||||
}
|
|
||||||
|
|
||||||
if ( support.matchesSelector && documentIsHTML &&
|
if ( support.matchesSelector && documentIsHTML &&
|
||||||
!nonnativeSelectorCache[ expr + " " ] &&
|
!nonnativeSelectorCache[ expr + " " ] &&
|
||||||
@ -998,6 +1096,7 @@ Sizzle.matchesSelector = function( elem, expr ) {
|
|||||||
|
|
||||||
// IE 9's matchesSelector returns false on disconnected nodes
|
// IE 9's matchesSelector returns false on disconnected nodes
|
||||||
if ( ret || support.disconnectedMatch ||
|
if ( ret || support.disconnectedMatch ||
|
||||||
|
|
||||||
// As well, disconnected nodes are said to be in a document
|
// As well, disconnected nodes are said to be in a document
|
||||||
// fragment in IE 9
|
// fragment in IE 9
|
||||||
elem.document && elem.document.nodeType !== 11 ) {
|
elem.document && elem.document.nodeType !== 11 ) {
|
||||||
@ -1012,20 +1111,31 @@ Sizzle.matchesSelector = function( elem, expr ) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Sizzle.contains = function( context, elem ) {
|
Sizzle.contains = function( context, elem ) {
|
||||||
|
|
||||||
// Set document vars if needed
|
// Set document vars if needed
|
||||||
if ( ( context.ownerDocument || context ) !== document ) {
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
if ( ( context.ownerDocument || context ) != document ) {
|
||||||
setDocument( context );
|
setDocument( context );
|
||||||
}
|
}
|
||||||
return contains( context, elem );
|
return contains( context, elem );
|
||||||
};
|
};
|
||||||
|
|
||||||
Sizzle.attr = function( elem, name ) {
|
Sizzle.attr = function( elem, name ) {
|
||||||
|
|
||||||
// Set document vars if needed
|
// Set document vars if needed
|
||||||
if ( ( elem.ownerDocument || elem ) !== document ) {
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
if ( ( elem.ownerDocument || elem ) != document ) {
|
||||||
setDocument( elem );
|
setDocument( elem );
|
||||||
}
|
}
|
||||||
|
|
||||||
var fn = Expr.attrHandle[ name.toLowerCase() ],
|
var fn = Expr.attrHandle[ name.toLowerCase() ],
|
||||||
|
|
||||||
// Don't get fooled by Object.prototype properties (jQuery #13807)
|
// Don't get fooled by Object.prototype properties (jQuery #13807)
|
||||||
val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
|
val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
|
||||||
fn( elem, name, !documentIsHTML ) :
|
fn( elem, name, !documentIsHTML ) :
|
||||||
@ -1092,17 +1202,21 @@ getText = Sizzle.getText = function( elem ) {
|
|||||||
nodeType = elem.nodeType;
|
nodeType = elem.nodeType;
|
||||||
|
|
||||||
if ( !nodeType ) {
|
if ( !nodeType ) {
|
||||||
|
|
||||||
// If no nodeType, this is expected to be an array
|
// If no nodeType, this is expected to be an array
|
||||||
while ( ( node = elem[ i++ ] ) ) {
|
while ( ( node = elem[ i++ ] ) ) {
|
||||||
|
|
||||||
// Do not traverse comment nodes
|
// Do not traverse comment nodes
|
||||||
ret += getText( node );
|
ret += getText( node );
|
||||||
}
|
}
|
||||||
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
|
} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
|
||||||
|
|
||||||
// Use textContent for elements
|
// Use textContent for elements
|
||||||
// innerText usage removed for consistency of new lines (jQuery #11153)
|
// innerText usage removed for consistency of new lines (jQuery #11153)
|
||||||
if ( typeof elem.textContent === "string" ) {
|
if ( typeof elem.textContent === "string" ) {
|
||||||
return elem.textContent;
|
return elem.textContent;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Traverse its children
|
// Traverse its children
|
||||||
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
|
for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
|
||||||
ret += getText( elem );
|
ret += getText( elem );
|
||||||
@ -1111,6 +1225,7 @@ getText = Sizzle.getText = function( elem ) {
|
|||||||
} else if ( nodeType === 3 || nodeType === 4 ) {
|
} else if ( nodeType === 3 || nodeType === 4 ) {
|
||||||
return elem.nodeValue;
|
return elem.nodeValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Do not include comment or processing instruction nodes
|
// Do not include comment or processing instruction nodes
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -1141,7 +1256,8 @@ Expr = Sizzle.selectors = {
|
|||||||
match[ 1 ] = match[ 1 ].replace( runescape, funescape );
|
match[ 1 ] = match[ 1 ].replace( runescape, funescape );
|
||||||
|
|
||||||
// Move the given value to match[3] whether quoted or unquoted
|
// Move the given value to match[3] whether quoted or unquoted
|
||||||
match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
|
match[ 3 ] = ( match[ 3 ] || match[ 4 ] ||
|
||||||
|
match[ 5 ] || "" ).replace( runescape, funescape );
|
||||||
|
|
||||||
if ( match[ 2 ] === "~=" ) {
|
if ( match[ 2 ] === "~=" ) {
|
||||||
match[ 3 ] = " " + match[ 3 ] + " ";
|
match[ 3 ] = " " + match[ 3 ] + " ";
|
||||||
@ -1151,6 +1267,7 @@ Expr = Sizzle.selectors = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
"CHILD": function( match ) {
|
"CHILD": function( match ) {
|
||||||
|
|
||||||
/* matches from matchExpr["CHILD"]
|
/* matches from matchExpr["CHILD"]
|
||||||
1 type (only|nth|...)
|
1 type (only|nth|...)
|
||||||
2 what (child|of-type)
|
2 what (child|of-type)
|
||||||
@ -1164,6 +1281,7 @@ Expr = Sizzle.selectors = {
|
|||||||
match[ 1 ] = match[ 1 ].toLowerCase();
|
match[ 1 ] = match[ 1 ].toLowerCase();
|
||||||
|
|
||||||
if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
|
if ( match[ 1 ].slice( 0, 3 ) === "nth" ) {
|
||||||
|
|
||||||
// nth-* requires argument
|
// nth-* requires argument
|
||||||
if ( !match[ 3 ] ) {
|
if ( !match[ 3 ] ) {
|
||||||
Sizzle.error( match[ 0 ] );
|
Sizzle.error( match[ 0 ] );
|
||||||
@ -1171,7 +1289,9 @@ Expr = Sizzle.selectors = {
|
|||||||
|
|
||||||
// numeric x and y parameters for Expr.filter.CHILD
|
// numeric x and y parameters for Expr.filter.CHILD
|
||||||
// remember that false/true cast respectively to 0/1
|
// remember that false/true cast respectively to 0/1
|
||||||
match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
|
match[ 4 ] = +( match[ 4 ] ?
|
||||||
|
match[ 5 ] + ( match[ 6 ] || 1 ) :
|
||||||
|
2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) );
|
||||||
match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
|
match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" );
|
||||||
|
|
||||||
// other types prohibit arguments
|
// other types prohibit arguments
|
||||||
@ -1196,8 +1316,10 @@ Expr = Sizzle.selectors = {
|
|||||||
|
|
||||||
// Strip excess characters from unquoted arguments
|
// Strip excess characters from unquoted arguments
|
||||||
} else if ( unquoted && rpseudo.test( unquoted ) &&
|
} else if ( unquoted && rpseudo.test( unquoted ) &&
|
||||||
|
|
||||||
// Get excess from tokenize (recursively)
|
// Get excess from tokenize (recursively)
|
||||||
( excess = tokenize( unquoted, true ) ) &&
|
( excess = tokenize( unquoted, true ) ) &&
|
||||||
|
|
||||||
// advance to the next closing parenthesis
|
// advance to the next closing parenthesis
|
||||||
( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
|
( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) {
|
||||||
|
|
||||||
@ -1216,7 +1338,9 @@ Expr = Sizzle.selectors = {
|
|||||||
"TAG": function( nodeNameSelector ) {
|
"TAG": function( nodeNameSelector ) {
|
||||||
var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
|
var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
|
||||||
return nodeNameSelector === "*" ?
|
return nodeNameSelector === "*" ?
|
||||||
function() { return true; } :
|
function() {
|
||||||
|
return true;
|
||||||
|
} :
|
||||||
function( elem ) {
|
function( elem ) {
|
||||||
return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
|
return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
|
||||||
};
|
};
|
||||||
@ -1226,9 +1350,15 @@ Expr = Sizzle.selectors = {
|
|||||||
var pattern = classCache[ className + " " ];
|
var pattern = classCache[ className + " " ];
|
||||||
|
|
||||||
return pattern ||
|
return pattern ||
|
||||||
(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
|
( pattern = new RegExp( "(^|" + whitespace +
|
||||||
classCache( className, function( elem ) {
|
")" + className + "(" + whitespace + "|$)" ) ) && classCache(
|
||||||
return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
|
className, function( elem ) {
|
||||||
|
return pattern.test(
|
||||||
|
typeof elem.className === "string" && elem.className ||
|
||||||
|
typeof elem.getAttribute !== "undefined" &&
|
||||||
|
elem.getAttribute( "class" ) ||
|
||||||
|
""
|
||||||
|
);
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1245,6 +1375,8 @@ Expr = Sizzle.selectors = {
|
|||||||
|
|
||||||
result += "";
|
result += "";
|
||||||
|
|
||||||
|
/* eslint-disable max-len */
|
||||||
|
|
||||||
return operator === "=" ? result === check :
|
return operator === "=" ? result === check :
|
||||||
operator === "!=" ? result !== check :
|
operator === "!=" ? result !== check :
|
||||||
operator === "^=" ? check && result.indexOf( check ) === 0 :
|
operator === "^=" ? check && result.indexOf( check ) === 0 :
|
||||||
@ -1253,10 +1385,12 @@ Expr = Sizzle.selectors = {
|
|||||||
operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
|
operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
|
||||||
operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
|
operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
|
||||||
false;
|
false;
|
||||||
|
/* eslint-enable max-len */
|
||||||
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
"CHILD": function( type, what, argument, first, last ) {
|
"CHILD": function( type, what, _argument, first, last ) {
|
||||||
var simple = type.slice( 0, 3 ) !== "nth",
|
var simple = type.slice( 0, 3 ) !== "nth",
|
||||||
forward = type.slice( -4 ) !== "last",
|
forward = type.slice( -4 ) !== "last",
|
||||||
ofType = what === "of-type";
|
ofType = what === "of-type";
|
||||||
@ -1268,7 +1402,7 @@ Expr = Sizzle.selectors = {
|
|||||||
return !!elem.parentNode;
|
return !!elem.parentNode;
|
||||||
} :
|
} :
|
||||||
|
|
||||||
function( elem, context, xml ) {
|
function( elem, _context, xml ) {
|
||||||
var cache, uniqueCache, outerCache, node, nodeIndex, start,
|
var cache, uniqueCache, outerCache, node, nodeIndex, start,
|
||||||
dir = simple !== forward ? "nextSibling" : "previousSibling",
|
dir = simple !== forward ? "nextSibling" : "previousSibling",
|
||||||
parent = elem.parentNode,
|
parent = elem.parentNode,
|
||||||
@ -1290,6 +1424,7 @@ Expr = Sizzle.selectors = {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reverse direction for :only-* (if we haven't yet done so)
|
// Reverse direction for :only-* (if we haven't yet done so)
|
||||||
start = dir = type === "only" && !start && "nextSibling";
|
start = dir = type === "only" && !start && "nextSibling";
|
||||||
}
|
}
|
||||||
@ -1330,8 +1465,10 @@ Expr = Sizzle.selectors = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Use previously-cached element index if available
|
// Use previously-cached element index if available
|
||||||
if ( useCache ) {
|
if ( useCache ) {
|
||||||
|
|
||||||
// ...in a gzip-friendly way
|
// ...in a gzip-friendly way
|
||||||
node = elem;
|
node = elem;
|
||||||
outerCache = node[ expando ] || ( node[ expando ] = {} );
|
outerCache = node[ expando ] || ( node[ expando ] = {} );
|
||||||
@ -1349,6 +1486,7 @@ Expr = Sizzle.selectors = {
|
|||||||
// xml :nth-child(...)
|
// xml :nth-child(...)
|
||||||
// or :nth-last-child(...) or :nth(-last)?-of-type(...)
|
// or :nth-last-child(...) or :nth(-last)?-of-type(...)
|
||||||
if ( diff === false ) {
|
if ( diff === false ) {
|
||||||
|
|
||||||
// Use the same loop as above to seek `elem` from the start
|
// Use the same loop as above to seek `elem` from the start
|
||||||
while ( ( node = ++nodeIndex && node && node[ dir ] ||
|
while ( ( node = ++nodeIndex && node && node[ dir ] ||
|
||||||
( diff = nodeIndex = 0 ) || start.pop() ) ) {
|
( diff = nodeIndex = 0 ) || start.pop() ) ) {
|
||||||
@ -1360,7 +1498,8 @@ Expr = Sizzle.selectors = {
|
|||||||
|
|
||||||
// Cache the index of each encountered element
|
// Cache the index of each encountered element
|
||||||
if ( useCache ) {
|
if ( useCache ) {
|
||||||
outerCache = node[ expando ] || (node[ expando ] = {});
|
outerCache = node[ expando ] ||
|
||||||
|
( node[ expando ] = {} );
|
||||||
|
|
||||||
// Support: IE <9 only
|
// Support: IE <9 only
|
||||||
// Defend against cloned attroperties (jQuery gh-1709)
|
// Defend against cloned attroperties (jQuery gh-1709)
|
||||||
@ -1386,6 +1525,7 @@ Expr = Sizzle.selectors = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
"PSEUDO": function( pseudo, argument ) {
|
"PSEUDO": function( pseudo, argument ) {
|
||||||
|
|
||||||
// pseudo-class names are case-insensitive
|
// pseudo-class names are case-insensitive
|
||||||
// http://www.w3.org/TR/selectors/#pseudo-classes
|
// http://www.w3.org/TR/selectors/#pseudo-classes
|
||||||
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
|
// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
|
||||||
@ -1424,8 +1564,10 @@ Expr = Sizzle.selectors = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
pseudos: {
|
pseudos: {
|
||||||
|
|
||||||
// Potentially complex pseudos
|
// Potentially complex pseudos
|
||||||
"not": markFunction( function( selector ) {
|
"not": markFunction( function( selector ) {
|
||||||
|
|
||||||
// Trim the selector passed to compile
|
// Trim the selector passed to compile
|
||||||
// to avoid treating leading and trailing
|
// to avoid treating leading and trailing
|
||||||
// spaces as combinators
|
// spaces as combinators
|
||||||
@ -1434,7 +1576,7 @@ Expr = Sizzle.selectors = {
|
|||||||
matcher = compile( selector.replace( rtrim, "$1" ) );
|
matcher = compile( selector.replace( rtrim, "$1" ) );
|
||||||
|
|
||||||
return matcher[ expando ] ?
|
return matcher[ expando ] ?
|
||||||
markFunction(function( seed, matches, context, xml ) {
|
markFunction( function( seed, matches, _context, xml ) {
|
||||||
var elem,
|
var elem,
|
||||||
unmatched = matcher( seed, null, xml, [] ),
|
unmatched = matcher( seed, null, xml, [] ),
|
||||||
i = seed.length;
|
i = seed.length;
|
||||||
@ -1446,9 +1588,10 @@ Expr = Sizzle.selectors = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ) :
|
} ) :
|
||||||
function( elem, context, xml ) {
|
function( elem, _context, xml ) {
|
||||||
input[ 0 ] = elem;
|
input[ 0 ] = elem;
|
||||||
matcher( input, null, xml, results );
|
matcher( input, null, xml, results );
|
||||||
|
|
||||||
// Don't keep the element (issue #299)
|
// Don't keep the element (issue #299)
|
||||||
input[ 0 ] = null;
|
input[ 0 ] = null;
|
||||||
return !results.pop();
|
return !results.pop();
|
||||||
@ -1476,6 +1619,7 @@ Expr = Sizzle.selectors = {
|
|||||||
// The identifier C does not have to be a valid language name."
|
// The identifier C does not have to be a valid language name."
|
||||||
// http://www.w3.org/TR/selectors/#lang-pseudo
|
// http://www.w3.org/TR/selectors/#lang-pseudo
|
||||||
"lang": markFunction( function( lang ) {
|
"lang": markFunction( function( lang ) {
|
||||||
|
|
||||||
// lang value must be a valid identifier
|
// lang value must be a valid identifier
|
||||||
if ( !ridentifier.test( lang || "" ) ) {
|
if ( !ridentifier.test( lang || "" ) ) {
|
||||||
Sizzle.error( "unsupported lang: " + lang );
|
Sizzle.error( "unsupported lang: " + lang );
|
||||||
@ -1507,7 +1651,9 @@ Expr = Sizzle.selectors = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
"focus": function( elem ) {
|
"focus": function( elem ) {
|
||||||
return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
|
return elem === document.activeElement &&
|
||||||
|
( !document.hasFocus || document.hasFocus() ) &&
|
||||||
|
!!( elem.type || elem.href || ~elem.tabIndex );
|
||||||
},
|
},
|
||||||
|
|
||||||
// Boolean properties
|
// Boolean properties
|
||||||
@ -1515,16 +1661,20 @@ Expr = Sizzle.selectors = {
|
|||||||
"disabled": createDisabledPseudo( true ),
|
"disabled": createDisabledPseudo( true ),
|
||||||
|
|
||||||
"checked": function( elem ) {
|
"checked": function( elem ) {
|
||||||
|
|
||||||
// In CSS3, :checked should return both checked and selected elements
|
// In CSS3, :checked should return both checked and selected elements
|
||||||
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
|
||||||
var nodeName = elem.nodeName.toLowerCase();
|
var nodeName = elem.nodeName.toLowerCase();
|
||||||
return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
|
return ( nodeName === "input" && !!elem.checked ) ||
|
||||||
|
( nodeName === "option" && !!elem.selected );
|
||||||
},
|
},
|
||||||
|
|
||||||
"selected": function( elem ) {
|
"selected": function( elem ) {
|
||||||
|
|
||||||
// Accessing this property makes selected-by-default
|
// Accessing this property makes selected-by-default
|
||||||
// options in Safari work properly
|
// options in Safari work properly
|
||||||
if ( elem.parentNode ) {
|
if ( elem.parentNode ) {
|
||||||
|
// eslint-disable-next-line no-unused-expressions
|
||||||
elem.parentNode.selectedIndex;
|
elem.parentNode.selectedIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1533,6 +1683,7 @@ Expr = Sizzle.selectors = {
|
|||||||
|
|
||||||
// Contents
|
// Contents
|
||||||
"empty": function( elem ) {
|
"empty": function( elem ) {
|
||||||
|
|
||||||
// http://www.w3.org/TR/selectors/#empty-pseudo
|
// http://www.w3.org/TR/selectors/#empty-pseudo
|
||||||
// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
|
// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
|
||||||
// but not by others (comment: 8; processing instruction: 7; etc.)
|
// but not by others (comment: 8; processing instruction: 7; etc.)
|
||||||
@ -1570,7 +1721,8 @@ Expr = Sizzle.selectors = {
|
|||||||
|
|
||||||
// Support: IE<8
|
// Support: IE<8
|
||||||
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
|
// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
|
||||||
( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
|
( ( attr = elem.getAttribute( "type" ) ) == null ||
|
||||||
|
attr.toLowerCase() === "text" );
|
||||||
},
|
},
|
||||||
|
|
||||||
// Position-in-collection
|
// Position-in-collection
|
||||||
@ -1578,11 +1730,11 @@ Expr = Sizzle.selectors = {
|
|||||||
return [ 0 ];
|
return [ 0 ];
|
||||||
} ),
|
} ),
|
||||||
|
|
||||||
"last": createPositionalPseudo(function( matchIndexes, length ) {
|
"last": createPositionalPseudo( function( _matchIndexes, length ) {
|
||||||
return [ length - 1 ];
|
return [ length - 1 ];
|
||||||
} ),
|
} ),
|
||||||
|
|
||||||
"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
"eq": createPositionalPseudo( function( _matchIndexes, length, argument ) {
|
||||||
return [ argument < 0 ? argument + length : argument ];
|
return [ argument < 0 ? argument + length : argument ];
|
||||||
} ),
|
} ),
|
||||||
|
|
||||||
@ -1657,6 +1809,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
|||||||
// Comma and first run
|
// Comma and first run
|
||||||
if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
|
if ( !matched || ( match = rcomma.exec( soFar ) ) ) {
|
||||||
if ( match ) {
|
if ( match ) {
|
||||||
|
|
||||||
// Don't consume trailing commas as valid
|
// Don't consume trailing commas as valid
|
||||||
soFar = soFar.slice( match[ 0 ].length ) || soFar;
|
soFar = soFar.slice( match[ 0 ].length ) || soFar;
|
||||||
}
|
}
|
||||||
@ -1670,6 +1823,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
|||||||
matched = match.shift();
|
matched = match.shift();
|
||||||
tokens.push( {
|
tokens.push( {
|
||||||
value: matched,
|
value: matched,
|
||||||
|
|
||||||
// Cast descendant combinators to space
|
// Cast descendant combinators to space
|
||||||
type: match[ 0 ].replace( rtrim, " " )
|
type: match[ 0 ].replace( rtrim, " " )
|
||||||
} );
|
} );
|
||||||
@ -1702,6 +1856,7 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
|
|||||||
soFar.length :
|
soFar.length :
|
||||||
soFar ?
|
soFar ?
|
||||||
Sizzle.error( selector ) :
|
Sizzle.error( selector ) :
|
||||||
|
|
||||||
// Cache the tokens
|
// Cache the tokens
|
||||||
tokenCache( selector, groups ).slice( 0 );
|
tokenCache( selector, groups ).slice( 0 );
|
||||||
};
|
};
|
||||||
@ -1724,6 +1879,7 @@ function addCombinator( matcher, combinator, base ) {
|
|||||||
doneName = done++;
|
doneName = done++;
|
||||||
|
|
||||||
return combinator.first ?
|
return combinator.first ?
|
||||||
|
|
||||||
// Check against closest ancestor/preceding element
|
// Check against closest ancestor/preceding element
|
||||||
function( elem, context, xml ) {
|
function( elem, context, xml ) {
|
||||||
while ( ( elem = elem[ dir ] ) ) {
|
while ( ( elem = elem[ dir ] ) ) {
|
||||||
@ -1755,7 +1911,8 @@ function addCombinator( matcher, combinator, base ) {
|
|||||||
|
|
||||||
// Support: IE <9 only
|
// Support: IE <9 only
|
||||||
// Defend against cloned attroperties (jQuery gh-1709)
|
// Defend against cloned attroperties (jQuery gh-1709)
|
||||||
uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
|
uniqueCache = outerCache[ elem.uniqueID ] ||
|
||||||
|
( outerCache[ elem.uniqueID ] = {} );
|
||||||
|
|
||||||
if ( skip && skip === elem.nodeName.toLowerCase() ) {
|
if ( skip && skip === elem.nodeName.toLowerCase() ) {
|
||||||
elem = elem[ dir ] || elem;
|
elem = elem[ dir ] || elem;
|
||||||
@ -1765,6 +1922,7 @@ function addCombinator( matcher, combinator, base ) {
|
|||||||
// Assign to newCache so results back-propagate to previous elements
|
// Assign to newCache so results back-propagate to previous elements
|
||||||
return ( newCache[ 2 ] = oldCache[ 2 ] );
|
return ( newCache[ 2 ] = oldCache[ 2 ] );
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Reuse newcache so results back-propagate to previous elements
|
// Reuse newcache so results back-propagate to previous elements
|
||||||
uniqueCache[ key ] = newCache;
|
uniqueCache[ key ] = newCache;
|
||||||
|
|
||||||
@ -1838,7 +1996,11 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
|||||||
preexisting = results.length,
|
preexisting = results.length,
|
||||||
|
|
||||||
// Get initial elements from seed or context
|
// Get initial elements from seed or context
|
||||||
elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
|
elems = seed || multipleContexts(
|
||||||
|
selector || "*",
|
||||||
|
context.nodeType ? [ context ] : context,
|
||||||
|
[]
|
||||||
|
),
|
||||||
|
|
||||||
// Prefilter to get matcher input, preserving a map for seed-results synchronization
|
// Prefilter to get matcher input, preserving a map for seed-results synchronization
|
||||||
matcherIn = preFilter && ( seed || !selector ) ?
|
matcherIn = preFilter && ( seed || !selector ) ?
|
||||||
@ -1846,6 +2008,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
|||||||
elems,
|
elems,
|
||||||
|
|
||||||
matcherOut = matcher ?
|
matcherOut = matcher ?
|
||||||
|
|
||||||
// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
|
// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
|
||||||
postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
|
postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
|
||||||
|
|
||||||
@ -1878,11 +2041,13 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
|||||||
if ( seed ) {
|
if ( seed ) {
|
||||||
if ( postFinder || preFilter ) {
|
if ( postFinder || preFilter ) {
|
||||||
if ( postFinder ) {
|
if ( postFinder ) {
|
||||||
|
|
||||||
// Get the final matcherOut by condensing this intermediate into postFinder contexts
|
// Get the final matcherOut by condensing this intermediate into postFinder contexts
|
||||||
temp = [];
|
temp = [];
|
||||||
i = matcherOut.length;
|
i = matcherOut.length;
|
||||||
while ( i-- ) {
|
while ( i-- ) {
|
||||||
if ( ( elem = matcherOut[ i ] ) ) {
|
if ( ( elem = matcherOut[ i ] ) ) {
|
||||||
|
|
||||||
// Restore matcherIn since elem is not yet a final match
|
// Restore matcherIn since elem is not yet a final match
|
||||||
temp.push( ( matcherIn[ i ] = elem ) );
|
temp.push( ( matcherIn[ i ] = elem ) );
|
||||||
}
|
}
|
||||||
@ -1936,6 +2101,7 @@ function matcherFromTokens( tokens ) {
|
|||||||
( checkContext = context ).nodeType ?
|
( checkContext = context ).nodeType ?
|
||||||
matchContext( elem, context, xml ) :
|
matchContext( elem, context, xml ) :
|
||||||
matchAnyContext( elem, context, xml ) );
|
matchAnyContext( elem, context, xml ) );
|
||||||
|
|
||||||
// Avoid hanging onto element (issue #299)
|
// Avoid hanging onto element (issue #299)
|
||||||
checkContext = null;
|
checkContext = null;
|
||||||
return ret;
|
return ret;
|
||||||
@ -1949,6 +2115,7 @@ function matcherFromTokens( tokens ) {
|
|||||||
|
|
||||||
// Return special upon seeing a positional matcher
|
// Return special upon seeing a positional matcher
|
||||||
if ( matcher[ expando ] ) {
|
if ( matcher[ expando ] ) {
|
||||||
|
|
||||||
// Find the next relative operator (if any) for proper handling
|
// Find the next relative operator (if any) for proper handling
|
||||||
j = ++i;
|
j = ++i;
|
||||||
for ( ; j < len; j++ ) {
|
for ( ; j < len; j++ ) {
|
||||||
@ -1959,8 +2126,11 @@ function matcherFromTokens( tokens ) {
|
|||||||
return setMatcher(
|
return setMatcher(
|
||||||
i > 1 && elementMatcher( matchers ),
|
i > 1 && elementMatcher( matchers ),
|
||||||
i > 1 && toSelector(
|
i > 1 && toSelector(
|
||||||
|
|
||||||
// If the preceding token was a descendant combinator, insert an implicit any-element `*`
|
// If the preceding token was a descendant combinator, insert an implicit any-element `*`
|
||||||
tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
|
tokens
|
||||||
|
.slice( 0, i - 1 )
|
||||||
|
.concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } )
|
||||||
).replace( rtrim, "$1" ),
|
).replace( rtrim, "$1" ),
|
||||||
matcher,
|
matcher,
|
||||||
i < j && matcherFromTokens( tokens.slice( i, j ) ),
|
i < j && matcherFromTokens( tokens.slice( i, j ) ),
|
||||||
@ -1985,14 +2155,21 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
|||||||
unmatched = seed && [],
|
unmatched = seed && [],
|
||||||
setMatched = [],
|
setMatched = [],
|
||||||
contextBackup = outermostContext,
|
contextBackup = outermostContext,
|
||||||
|
|
||||||
// We must always have either seed elements or outermost context
|
// We must always have either seed elements or outermost context
|
||||||
elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
|
elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ),
|
||||||
|
|
||||||
// Use integer dirruns iff this is the outermost matcher
|
// Use integer dirruns iff this is the outermost matcher
|
||||||
dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
|
dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),
|
||||||
len = elems.length;
|
len = elems.length;
|
||||||
|
|
||||||
if ( outermost ) {
|
if ( outermost ) {
|
||||||
outermostContext = context === document || context || outermost;
|
|
||||||
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
outermostContext = context == document || context || outermost;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add elements passing elementMatchers directly to results
|
// Add elements passing elementMatchers directly to results
|
||||||
@ -2001,7 +2178,12 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
|||||||
for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
|
for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {
|
||||||
if ( byElement && elem ) {
|
if ( byElement && elem ) {
|
||||||
j = 0;
|
j = 0;
|
||||||
if ( !context && elem.ownerDocument !== document ) {
|
|
||||||
|
// Support: IE 11+, Edge 17 - 18+
|
||||||
|
// IE/Edge sometimes throw a "Permission denied" error when strict-comparing
|
||||||
|
// two documents; shallow comparisons work.
|
||||||
|
// eslint-disable-next-line eqeqeq
|
||||||
|
if ( !context && elem.ownerDocument != document ) {
|
||||||
setDocument( elem );
|
setDocument( elem );
|
||||||
xml = !documentIsHTML;
|
xml = !documentIsHTML;
|
||||||
}
|
}
|
||||||
@ -2018,6 +2200,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
|||||||
|
|
||||||
// Track unmatched elements for set filters
|
// Track unmatched elements for set filters
|
||||||
if ( bySet ) {
|
if ( bySet ) {
|
||||||
|
|
||||||
// They will have gone through all possible matchers
|
// They will have gone through all possible matchers
|
||||||
if ( ( elem = !matcher && elem ) ) {
|
if ( ( elem = !matcher && elem ) ) {
|
||||||
matchedCount--;
|
matchedCount--;
|
||||||
@ -2048,6 +2231,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( seed ) {
|
if ( seed ) {
|
||||||
|
|
||||||
// Reintegrate element matches to eliminate the need for sorting
|
// Reintegrate element matches to eliminate the need for sorting
|
||||||
if ( matchedCount > 0 ) {
|
if ( matchedCount > 0 ) {
|
||||||
while ( i-- ) {
|
while ( i-- ) {
|
||||||
@ -2093,6 +2277,7 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
|
|||||||
cached = compilerCache[ selector + " " ];
|
cached = compilerCache[ selector + " " ];
|
||||||
|
|
||||||
if ( !cached ) {
|
if ( !cached ) {
|
||||||
|
|
||||||
// Generate a function of recursive functions that can be used to check each element
|
// Generate a function of recursive functions that can be used to check each element
|
||||||
if ( !match ) {
|
if ( !match ) {
|
||||||
match = tokenize( selector );
|
match = tokenize( selector );
|
||||||
@ -2108,7 +2293,10 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Cache the compiled function
|
// Cache the compiled function
|
||||||
cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
|
cached = compilerCache(
|
||||||
|
selector,
|
||||||
|
matcherFromGroupMatchers( elementMatchers, setMatchers )
|
||||||
|
);
|
||||||
|
|
||||||
// Save selector and tokenization
|
// Save selector and tokenization
|
||||||
cached.selector = selector;
|
cached.selector = selector;
|
||||||
@ -2141,7 +2329,8 @@ select = Sizzle.select = function( selector, context, results, seed ) {
|
|||||||
if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
|
if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" &&
|
||||||
context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
|
context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {
|
||||||
|
|
||||||
context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
|
context = ( Expr.find[ "ID" ]( token.matches[ 0 ]
|
||||||
|
.replace( runescape, funescape ), context ) || [] )[ 0 ];
|
||||||
if ( !context ) {
|
if ( !context ) {
|
||||||
return results;
|
return results;
|
||||||
|
|
||||||
@ -2163,10 +2352,12 @@ select = Sizzle.select = function( selector, context, results, seed ) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if ( ( find = Expr.find[ type ] ) ) {
|
if ( ( find = Expr.find[ type ] ) ) {
|
||||||
|
|
||||||
// Search, expanding context for leading sibling combinators
|
// Search, expanding context for leading sibling combinators
|
||||||
if ( ( seed = find(
|
if ( ( seed = find(
|
||||||
token.matches[ 0 ].replace( runescape, funescape ),
|
token.matches[ 0 ].replace( runescape, funescape ),
|
||||||
rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
|
rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) ||
|
||||||
|
context
|
||||||
) ) ) {
|
) ) ) {
|
||||||
|
|
||||||
// If seed is empty or no tokens remain, we can return early
|
// If seed is empty or no tokens remain, we can return early
|
||||||
@ -2210,6 +2401,7 @@ setDocument();
|
|||||||
// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
|
// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
|
||||||
// Detached nodes confoundingly follow *each other*
|
// Detached nodes confoundingly follow *each other*
|
||||||
support.sortDetached = assert( function( el ) {
|
support.sortDetached = assert( function( el ) {
|
||||||
|
|
||||||
// Should return 1, but returns 4 (following)
|
// Should return 1, but returns 4 (following)
|
||||||
return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
|
return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1;
|
||||||
} );
|
} );
|
||||||
@ -2235,7 +2427,7 @@ if ( !support.attributes || !assert(function( el ) {
|
|||||||
el.firstChild.setAttribute( "value", "" );
|
el.firstChild.setAttribute( "value", "" );
|
||||||
return el.firstChild.getAttribute( "value" ) === "";
|
return el.firstChild.getAttribute( "value" ) === "";
|
||||||
} ) ) {
|
} ) ) {
|
||||||
addHandle( "value", function( elem, name, isXML ) {
|
addHandle( "value", function( elem, _name, isXML ) {
|
||||||
if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
|
if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
|
||||||
return elem.defaultValue;
|
return elem.defaultValue;
|
||||||
}
|
}
|
||||||
@ -2270,13 +2462,17 @@ Sizzle.noConflict = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
define(function() { return Sizzle; });
|
define( function() {
|
||||||
|
return Sizzle;
|
||||||
|
} );
|
||||||
|
|
||||||
// Sizzle requires that there be a global window in Common-JS like environments
|
// Sizzle requires that there be a global window in Common-JS like environments
|
||||||
} else if ( typeof module !== "undefined" && module.exports ) {
|
} else if ( typeof module !== "undefined" && module.exports ) {
|
||||||
module.exports = Sizzle;
|
module.exports = Sizzle;
|
||||||
} else {
|
} else {
|
||||||
window.Sizzle = Sizzle;
|
window.Sizzle = Sizzle;
|
||||||
}
|
}
|
||||||
|
|
||||||
// EXPOSE
|
// EXPOSE
|
||||||
|
|
||||||
} )( window );
|
} )( window );
|
||||||
|
4
external/sizzle/dist/sizzle.min.js
vendored
4
external/sizzle/dist/sizzle.min.js
vendored
File diff suppressed because one or more lines are too long
2
external/sizzle/dist/sizzle.min.map
vendored
2
external/sizzle/dist/sizzle.min.map
vendored
File diff suppressed because one or more lines are too long
@ -61,7 +61,7 @@
|
|||||||
"raw-body": "2.3.3",
|
"raw-body": "2.3.3",
|
||||||
"requirejs": "2.3.6",
|
"requirejs": "2.3.6",
|
||||||
"sinon": "2.3.7",
|
"sinon": "2.3.7",
|
||||||
"sizzle": "2.3.4",
|
"sizzle": "2.3.5",
|
||||||
"strip-json-comments": "2.0.1",
|
"strip-json-comments": "2.0.1",
|
||||||
"testswarm": "1.1.0",
|
"testswarm": "1.1.0",
|
||||||
"uglify-js": "3.4.7"
|
"uglify-js": "3.4.7"
|
||||||
|
Loading…
Reference in New Issue
Block a user