Added in jQuery.isFunction().
[jquery.git] / src / selector / selector.js
index 1bad21b..867bc4e 100644 (file)
@@ -93,16 +93,11 @@ jQuery.extend({
                var old, cur = [];
 
                while ( expr && expr != old ) {
-console.log( cur, expr, elems, not );
+                       old = expr;
                        var f = jQuery.filter( expr, elems, not );
                        expr = f.t.replace(/^\s*,\s*/, "" );
-
-                       if ( not )
-                               cur = elems = f.r;
-                       else
-                               cur = jQuery.merge( cur, f.r );
+                       cur = not ? elems = f.r : jQuery.merge( cur, f.r );
                }
-console.log( "DONE", cur, expr, elems, not );
 
                return cur;
        },
@@ -177,7 +172,7 @@ console.log( "DONE", cur, expr, elems, not );
                                        // If the token match was found
                                        if ( m ) {
                                                // Map it against the token's handler
-                                               r = ret = jQuery.map( ret, jQuery.token[i+1].constructor == Function ?
+                                               r = ret = jQuery.map( ret, jQuery.isFunction( jQuery.token[i+1] ) ?
                                                        jQuery.token[i+1] :
                                                        function(a){ return eval(jQuery.token[i+1]); });
 
@@ -193,8 +188,8 @@ console.log( "DONE", cur, expr, elems, not );
                        // matched a token
                        if ( t && !foundToken ) {
                                // Handle multiple expressions
-                               if ( !t.indexOf(",") || !t.indexOf("|") ) {
-                                       // Clean teh result set
+                               if ( !t.indexOf(",") ) {
+                                       // Clean the result set
                                        if ( ret[0] == context ) ret.shift();
 
                                        // Merge the result sets
@@ -240,12 +235,20 @@ console.log( "DONE", cur, expr, elems, not );
                                                // We need to find all descendant elements, it is more
                                                // efficient to use getAll() when we are already further down
                                                // the tree - we try to recognize that here
-                                               for ( var i = 0, rl = ret.length; i < rl; i++ )
+                                               for ( var i = 0, rl = ret.length; i < rl; i++ ) {
+                                                       // Grab the tag name being searched for
+                                                       var tag = m[1] != "" || m[0] == "" ? "*" : m[2];
+
+                                                       // Handle IE7 being really dumb about <object>s
+                                                       if ( ret[i].nodeName.toUpperCase() == "OBJECT" && tag == "*" )
+                                                               tag = "param";
+
                                                        jQuery.merge( r,
                                                                m[1] != "" && ret.length != 1 ?
                                                                        jQuery.getAll( ret[i], [], m[1], m[2], rec ) :
-                                                                       ret[i].getElementsByTagName( m[1] != "" || m[0] == "" ? "*" : m[2] )
+                                                                       ret[i].getElementsByTagName( tag )
                                                        );
+                                               }
 
                                                // It's faster to filter by class and be done with it
                                                if ( m[1] == "." && ret.length == 1 )
@@ -309,13 +312,13 @@ console.log( "DONE", cur, expr, elems, not );
                                var m = re.exec( t );
 
                                if ( m ) {
+                                       // Remove what we just matched
+                                       t = t.substring( m[0].length );
+
                                        // Re-organize the first match
                                        if ( jQuery.expr[ m[1] ]._resort )
                                                m = jQuery.expr[ m[1] ]._resort( m );
 
-                                       // Remove what we just matched
-                                       t = t.replace( re, "" );
-
                                        break;
                                }
                        }