Now handle the case where Safari's querySelectorAll fails on uppercase characters...
[jquery.git] / src / selector.js
index 59ca2f6..6a629bd 100644 (file)
@@ -6,7 +6,7 @@
  */
 (function(){
 
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]+['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,
        done = 0,
        toString = Object.prototype.toString;
 
@@ -332,11 +332,12 @@ var Expr = Sizzle.selectors = {
                CLASS: function(match, curLoop, inplace, result, not){
                        match = " " + match[1].replace(/\\/g, "") + " ";
 
-                       for ( var i = 0; curLoop[i] != null; i++ ) {
-                               if ( curLoop[i] ) {
-                                       if ( not ^ (" " + curLoop[i].className + " ").indexOf(match) >= 0 ) {
+                       var elem;
+                       for ( var i = 0; (elem = curLoop[i]) != null; i++ ) {
+                               if ( elem ) {
+                                       if ( not ^ (" " + elem.className + " ").indexOf(match) >= 0 ) {
                                                if ( !inplace )
-                                                       result.push( curLoop[i] );
+                                                       result.push( elem );
                                        } else if ( inplace ) {
                                                curLoop[i] = false;
                                        }
@@ -494,7 +495,7 @@ var Expr = Sizzle.selectors = {
                CHILD: function(elem, match){
                        var type = match[1], parent = elem.parentNode;
 
-                       var doneName = "child" + parent.childNodes.length;
+                       var doneName = match[0];
                        
                        if ( parent && (!parent[ doneName ] || !elem.nodeIndex) ) {
                                var count = 1;
@@ -563,7 +564,7 @@ var Expr = Sizzle.selectors = {
                ATTR: function(elem, match){
                        var result = Expr.attrHandle[ match[1] ] ? Expr.attrHandle[ match[1] ]( elem ) : elem[ match[1] ] || elem.getAttribute( match[1] ), value = result + "", type = match[2], check = match[4];
                        return result == null ?
-                               false :
+                               type === "!=" :
                                type === "=" ?
                                value === check :
                                type === "*=" ?
@@ -708,7 +709,14 @@ try {
 })();
 
 if ( document.querySelectorAll ) (function(){
-       var oldSizzle = Sizzle;
+       var oldSizzle = Sizzle, div = document.createElement("div");
+       div.innerHTML = "<p class='TEST'></p>";
+
+       // Safari can't handle uppercase or unicode characters when
+       // in quirks mode.
+       if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+               return;
+       }
        
        Sizzle = function(query, context, extra, seed){
                context = context || document;
@@ -831,7 +839,7 @@ var posProcess = function(selector, context){
        }
 
        return Sizzle.filter( later, tmpSet );
-}
+};
 
 // EXPOSE
 jQuery.find = Sizzle;