Added a change that triples the speed of all uses of $(...). For example $(DOMElement...
[jquery.git] / src / core.js
index 313cdfa..39ffdb5 100644 (file)
@@ -14,10 +14,8 @@ if ( window.jQuery )
        var _jQuery = window.jQuery;
 
 var jQuery = window.jQuery = function( selector, context ) {
-       // If the context is a namespace object, return a new object
-       return this instanceof jQuery ?
-               this.init( selector, context ) :
-               new jQuery( selector, context );
+       // The jQuery object is actually just the init constructor 'enhanced'
+       return new jQuery.prototype.init( selector, context );
 };
 
 // Map over the $ in case of overwrite
@@ -292,9 +290,23 @@ jQuery.fn = jQuery.prototype = {
        clone: function( events ) {
                // Do the clone
                var ret = this.map(function(){
-                       return this.outerHTML ?
-                               jQuery( this.outerHTML )[0] :
-                               this.cloneNode( true );
+                       if ( jQuery.browser.msie ) {
+                               // IE copies events bound via attachEvent when
+                               // using cloneNode. Calling detachEvent on the
+                               // clone will also remove the events from the orignal
+                               // In order to get around this, we use innerHTML.
+                               // Unfortunately, this means some modifications to 
+                               // attributes in IE that are actually only stored 
+                               // 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.appendChild(clone);
+                               container2.innerHTML = container.innerHTML;
+                               return container2.firstChild;
+                       } else
+                               return this.cloneNode(true);
                });
 
                // Need to set the expando to null on the cloned set if it exists
@@ -507,6 +519,9 @@ jQuery.fn = jQuery.prototype = {
        }
 };
 
+// Give the init function the jQuery prototype for later instantiation
+jQuery.prototype.init.prototype = jQuery.prototype;
+
 function evalScript( i, elem ) {
        if ( elem.src )
                jQuery.ajax({