Merging the latest from Sizzle.
This commit is contained in:
parent
73ff49ac9a
commit
2e42c5b044
|
@ -1,16 +1,16 @@
|
|||
/*
|
||||
* Sizzle CSS Selector Engine - v0.9
|
||||
* Copyright 2009, John Resig (http://ejohn.org/)
|
||||
* released under the MIT License
|
||||
/*!
|
||||
* Sizzle CSS Selector Engine - v0.9.1
|
||||
* Copyright 2009, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
* More information: http://sizzlejs.com/
|
||||
*/
|
||||
(function(){
|
||||
|
||||
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g;
|
||||
|
||||
var done = 0;
|
||||
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
|
||||
done = 0,
|
||||
toString = Object.prototype.toString;
|
||||
|
||||
var Sizzle = function(selector, context, results, seed) {
|
||||
var doCache = !results;
|
||||
results = results || [];
|
||||
context = context || document;
|
||||
|
||||
|
@ -90,7 +90,7 @@ var Sizzle = function(selector, context, results, seed) {
|
|||
pop = context;
|
||||
}
|
||||
|
||||
Expr.relative[ cur ]( checkSet, pop );
|
||||
Expr.relative[ cur ]( checkSet, pop, isXML(context) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ var Sizzle = function(selector, context, results, seed) {
|
|||
throw "Syntax error, unrecognized expression: " + (cur || selector);
|
||||
}
|
||||
|
||||
if ( checkSet instanceof Array ) {
|
||||
if ( toString.call(checkSet) === "[object Array]" ) {
|
||||
if ( !prune ) {
|
||||
results.push.apply( results, checkSet );
|
||||
} else if ( context.nodeType === 1 ) {
|
||||
|
@ -254,17 +254,18 @@ Sizzle.filter = function(expr, set, inplace, not){
|
|||
var Expr = Sizzle.selectors = {
|
||||
order: [ "ID", "NAME", "TAG" ],
|
||||
match: {
|
||||
ID: /#((?:[\w\u0128-\uFFFF_-]|\\.)+)/,
|
||||
CLASS: /\.((?:[\w\u0128-\uFFFF_-]|\\.)+)/,
|
||||
NAME: /\[name=['"]*((?:[\w\u0128-\uFFFF_-]|\\.)+)['"]*\]/,
|
||||
ATTR: /\[((?:[\w\u0128-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\]/,
|
||||
TAG: /^((?:[\w\u0128-\uFFFF\*_-]|\\.)+)/,
|
||||
CHILD: /:(only|nth|last|first)-child\(?(even|odd|[\dn+-]*)\)?/,
|
||||
POS: /:(nth|eq|gt|lt|first|last|even|odd)\(?(\d*)\)?(?:[^-]|$)/,
|
||||
PSEUDO: /:((?:[\w\u0128-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
|
||||
ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
|
||||
CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
|
||||
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
|
||||
ATTR: /\[((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\]/,
|
||||
TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
|
||||
CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
|
||||
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
|
||||
PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
|
||||
},
|
||||
attrMap: {
|
||||
"class": "className"
|
||||
"class": "className",
|
||||
"for": "htmlFor"
|
||||
},
|
||||
relative: {
|
||||
"+": function(checkSet, part){
|
||||
|
@ -285,9 +286,9 @@ var Expr = Sizzle.selectors = {
|
|||
Sizzle.filter( part, checkSet, true );
|
||||
}
|
||||
},
|
||||
">": function(checkSet, part){
|
||||
">": function(checkSet, part, isXML){
|
||||
if ( typeof part === "string" && !/\W/.test(part) ) {
|
||||
part = part.toUpperCase();
|
||||
part = isXML ? part : part.toUpperCase();
|
||||
|
||||
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
|
||||
var elem = checkSet[i];
|
||||
|
@ -311,21 +312,21 @@ var Expr = Sizzle.selectors = {
|
|||
}
|
||||
}
|
||||
},
|
||||
"": function(checkSet, part){
|
||||
"": function(checkSet, part, isXML){
|
||||
var doneName = "done" + (done++), checkFn = dirCheck;
|
||||
|
||||
if ( !part.match(/\W/) ) {
|
||||
var nodeCheck = part = part.toUpperCase();
|
||||
var nodeCheck = part = isXML ? part : part.toUpperCase();
|
||||
checkFn = dirNodeCheck;
|
||||
}
|
||||
|
||||
checkFn("parentNode", part, doneName, checkSet, nodeCheck);
|
||||
},
|
||||
"~": function(checkSet, part){
|
||||
"~": function(checkSet, part, isXML){
|
||||
var doneName = "done" + (done++), checkFn = dirCheck;
|
||||
|
||||
if ( typeof part === "string" && !part.match(/\W/) ) {
|
||||
var nodeCheck = part = part.toUpperCase();
|
||||
var nodeCheck = part = isXML ? part : part.toUpperCase();
|
||||
checkFn = dirNodeCheck;
|
||||
}
|
||||
|
||||
|
@ -362,10 +363,11 @@ var Expr = Sizzle.selectors = {
|
|||
return false;
|
||||
},
|
||||
ID: function(match){
|
||||
return match[1];
|
||||
return match[1].replace(/\\/g, "");
|
||||
},
|
||||
TAG: function(match){
|
||||
return match[1].toUpperCase();
|
||||
TAG: function(match, curLoop){
|
||||
for ( var i = 0; !curLoop[i]; i++ ){}
|
||||
return isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
|
||||
},
|
||||
CHILD: function(match){
|
||||
if ( match[1] == "nth" ) {
|
||||
|
@ -630,7 +632,7 @@ try {
|
|||
makeArray = function(array, results) {
|
||||
var ret = results || [];
|
||||
|
||||
if ( array instanceof Array ) {
|
||||
if ( toString.call(array) === "[object Array]" ) {
|
||||
Array.prototype.push.apply( ret, array );
|
||||
} else {
|
||||
if ( typeof array.length === "number" ) {
|
||||
|
@ -809,6 +811,11 @@ var contains = document.compareDocumentPosition ? function(a, b){
|
|||
return a !== b && (a.contains ? a.contains(b) : true);
|
||||
};
|
||||
|
||||
var isXML = function(elem){
|
||||
return elem.documentElement && !elem.body ||
|
||||
elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
|
||||
};
|
||||
|
||||
// EXPOSE
|
||||
jQuery.find = Sizzle;
|
||||
jQuery.filter = Sizzle.filter;
|
||||
|
|
Loading…
Reference in a new issue