Fix #2184 by using the jQuery.clean() function instead of a direct innerHTML assignme...
[jquery.git] / src / core.js
index 2b856c8..4cb0a22 100644 (file)
@@ -303,11 +303,9 @@ jQuery.fn = jQuery.prototype = {
                                // as properties will not be copied (such as the
                                // the name attribute on an input).
                                var clone = this.cloneNode(true),
-                                       container = document.createElement("div"),
-                                       container2 = document.createElement("div");
+                                       container = document.createElement("div");
                                container.appendChild(clone);
-                               container2.innerHTML = container.innerHTML;
-                               return container2.firstChild;
+                               return jQuery.clean([container.innerHTML])[0];
                        } else
                                return this.cloneNode(true);
                });
@@ -707,20 +705,22 @@ jQuery.extend({
        // args is for internal usage only
        each: function( object, callback, args ) {
                if ( args ) {
-                       if ( object.length == undefined )
+                       if ( object.length == undefined ) {
                                for ( var name in object )
-                                       callback.apply( object[ name ], args );
-                       else
+                                       if ( callback.apply( object[ name ], args ) === false )
+                                               break;
+                       } else
                                for ( var i = 0, length = object.length; i < length; i++ )
                                        if ( callback.apply( object[ i ], args ) === false )
                                                break;
 
                // A special, fast, case for the most common use of each
                } else {
-                       if ( object.length == undefined )
+                       if ( object.length == undefined ) {
                                for ( var name in object )
-                                       callback.call( object[ name ], name, object[ name ] );
-                       else
+                                       if ( callback.call( object[ name ], name, object[ name ] ) === false )
+                                               break;
+                       } else
                                for ( var i = 0, length = object.length, value = object[0]; 
                                        i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
                }
@@ -836,7 +836,7 @@ jQuery.extend({
                if ( name.match( /float/i ) )
                        name = styleFloat;
 
-               if ( !force && elem.style[ name ] )
+               if ( !force && elem.style && elem.style[ name ] )
                        ret = elem.style[ name ];
 
                else if ( document.defaultView && document.defaultView.getComputedStyle ) {