Fixed typo in logic, also disabled function setters in this case to allow the functi...
[jquery.git] / src / core.js
index 975d23c..edd1089 100644 (file)
@@ -35,7 +35,7 @@ var jQuery = function( selector, context ) {
        // Keep a UserAgent string for use with jQuery.browser
        userAgent = navigator.userAgent,
 
-       // For matching the engine and version of thte browser
+       // For matching the engine and version of the browser
        browserMatch,
        
        // Has the ready events already been bound?
@@ -316,10 +316,10 @@ jQuery.extend = jQuery.fn.extend = function() {
                                        continue;
                                }
 
-                               // Recurse if we're merging object literal values
-                               if ( deep && copy && jQuery.isPlainObject(copy) ) {
-                                       // Don't extend not object literals
-                                       var clone = src && jQuery.isPlainObject(src) ? src : {};
+                               // Recurse if we're merging object literal values or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
+                                       var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
+                                               : jQuery.isArray(copy) ? [] : {};
 
                                        // Never move original objects, clone them
                                        target[ name ] = jQuery.extend( deep, clone, copy );
@@ -661,8 +661,8 @@ jQuery.extend({
                        ret = { browser: "webkit", version: /webkit[\/ ]([\w.]+)/ };
 
                } else if ( /opera/.test( ua ) ) {
-                       ret = { browser: "opera", version: /opera[\/ ]([\w.]+)/ };
-
+                       ret = { browser: "opera", version:  /version/.test( ua ) ? /version[\/ ]([\w.]+)/ : /opera[\/ ]([\w.]+)/ };
+                       
                } else if ( /msie/.test( ua ) ) {
                        ret = { browser: "msie", version: /msie ([\w.]+)/ };
 
@@ -772,10 +772,10 @@ function access( elems, key, value, exec, fn, pass ) {
        // Setting one attribute
        if ( value !== undefined ) {
                // Optionally, function values get executed if exec is true
-               exec = exec && jQuery.isFunction(value);
+               exec = !pass && exec && jQuery.isFunction(value);
                
                for ( var i = 0; i < length; i++ ) {
-                       fn( elems[i], key, exec ? value.call( elems[i], i ) : value, pass );
+                       fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
                }
                
                return elems;