X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fselector.js;h=b404064a98e2df010f95ed34e6b3976256646b65;hb=8f042d8be34fe2d197e45d6fa398456759a4c007;hp=2e6d8e1abde5deda788f3989b8ae976ef25bdb84;hpb=9c0ddfa2ad14388ba8ff138b96966e993308f6cf;p=jquery.git
diff --git a/src/selector.js b/src/selector.js
index 2e6d8e1..b404064 100644
--- a/src/selector.js
+++ b/src/selector.js
@@ -8,7 +8,8 @@
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
done = 0,
- toString = Object.prototype.toString;
+ toString = Object.prototype.toString,
+ hasDuplicate = false;
var Sizzle = function(selector, context, results, seed) {
results = results || [];
@@ -65,7 +66,7 @@ var Sizzle = function(selector, context, results, seed) {
if ( context ) {
var ret = seed ?
{ expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, contextXML );
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
if ( parts.length > 0 ) {
@@ -124,22 +125,25 @@ var Sizzle = function(selector, context, results, seed) {
if ( extra ) {
Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
- if ( sortOrder ) {
- hasDuplicate = false;
- results.sort(sortOrder);
+Sizzle.uniqueSort = function(results){
+ if ( sortOrder ) {
+ hasDuplicate = false;
+ results.sort(sortOrder);
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[i-1] ) {
- results.splice(i--, 1);
- }
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[i-1] ) {
+ results.splice(i--, 1);
}
}
}
}
-
- return results;
};
Sizzle.matches = function(expr, set){
@@ -653,7 +657,7 @@ var Expr = Sizzle.selectors = {
var origPOS = Expr.match.POS;
for ( var type in Expr.match ) {
- Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
}
var makeArray = function(array, results) {
@@ -732,9 +736,9 @@ if ( document.documentElement.compareDocumentPosition ) {
// querying by getElementById (and provide a workaround)
(function(){
// We're going to inject a fake input element with a specified name
- var form = document.createElement("form"),
+ var form = document.createElement("div"),
id = "script" + (new Date).getTime();
- form.innerHTML = "";
+ form.innerHTML = "";
// Inject it into the root element, check its status, and remove it quickly
var root = document.documentElement;
@@ -757,6 +761,7 @@ if ( document.documentElement.compareDocumentPosition ) {
}
root.removeChild( form );
+ root = form = null; // release memory in IE
})();
(function(){
@@ -797,6 +802,8 @@ if ( document.documentElement.compareDocumentPosition ) {
return elem.getAttribute("href", 2);
};
}
+
+ div = null; // release memory in IE
})();
if ( document.querySelectorAll ) (function(){
@@ -823,10 +830,11 @@ if ( document.querySelectorAll ) (function(){
return oldSizzle(query, context, extra, seed);
};
- Sizzle.find = oldSizzle.find;
- Sizzle.filter = oldSizzle.filter;
- Sizzle.selectors = oldSizzle.selectors;
- Sizzle.matches = oldSizzle.matches;
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ div = null; // release memory in IE
})();
if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
@@ -849,6 +857,8 @@ if ( document.getElementsByClassName && document.documentElement.getElementsByCl
return context.getElementsByClassName(match[1]);
}
};
+
+ div = null; // release memory in IE
})();
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
@@ -938,7 +948,7 @@ var contains = document.compareDocumentPosition ? function(a, b){
var isXML = function(elem){
return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
- !!elem.ownerDocument && isXML( elem.ownerDocument );
+ !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML";
};
var posProcess = function(selector, context){
@@ -967,7 +977,7 @@ jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
Sizzle.selectors.filters.hidden = function(elem){
- return elem.offsetWidth === 0 || elem.offsetHeight === 0;
+ return elem.offsetWidth === 0 && elem.offsetHeight === 0;
};
Sizzle.selectors.filters.visible = function(elem){