$.extend deep now copies children's children, ect...
[jquery.git] / src / core.js
index 6997f89..5690df1 100644 (file)
@@ -480,16 +480,19 @@ jQuery.fn = jQuery.prototype = {
 
        data: function( key, value ){
                var parts = key.split(".");
+               parts[1] = parts[1] ? "." + parts[1] : "";
 
                if ( value == null ) {
-                       if ( this.length ) {
-                               var data = jQuery.data( this[0], key );
-                               return data == null ?
-                                       jQuery.data( this[0], parts[0] ) :
-                                       data;
-                       }
+                       var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+                       
+                       if ( data == undefined && this.length )
+                               data = jQuery.data( this[0], key );
+
+                       return data == null && parts[1] ?
+                               this.data( parts[0] ) :
+                               data;
                } else
-                       return this.trigger("setData" + (parts[1] ? "." + parts[1] : "") + "!", [parts[0], value]).each(function(){
+                       return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
                                jQuery.data( this, key, value );
                        });
        },
@@ -592,7 +595,7 @@ jQuery.extend = jQuery.fn.extend = function() {
 
                                // Recurse if we're merging object values
                                if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType )
-                                       target[ name ] = jQuery.extend( target[ name ], options[ name ] );
+                                       target[ name ] = jQuery.extend( deep, target[ name ], options[ name ] );
 
                                // Don't bring in undefined values
                                else if ( options[ name ] != undefined )
@@ -849,9 +852,9 @@ jQuery.extend({
                }
                // Opera sometimes will give the wrong display answer, this fixes it, see #2037
                if ( jQuery.browser.opera && name == "display" ) {
-                       var save = elem.style.display;
-                       elem.style.display = "block";
-                       elem.style.display = save;
+                       var save = elem.style.outline;
+                       elem.style.outline = "0 solid black";
+                       elem.style.outline = save;
                }
                
                // Make sure we're using the right name for getting the float value
@@ -1118,7 +1121,7 @@ jQuery.extend({
                var ret = [];
 
                // Need to use typeof to fight Safari childNodes crashes
-               if ( typeof array != "array" )
+               if ( array.constructor != Array )
                        for ( var i = 0, length = array.length; i < length; i++ )
                                ret.push( array[ i ] );
                else