X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=f40318b5dcbc0ea83e0a06dbfef60e46d3d0d695;hb=eabac3f6a189342cf8bb615de904f9f125374c67;hp=8ef706204369fc4e6dda88e0ebb348f0e7aa2578;hpb=a34a1a599bf84e3cbf189d6c4afb2d025649398c;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 8ef7062..f40318b 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -852,11 +852,30 @@ jQuery.fn = jQuery.prototype = { * @cat DOM/Manipulation */ clone: function(deep) { - return this.pushStack( jQuery.map( this, function(a){ - a = a.cloneNode( deep != undefined ? deep : true ); - a.$events = null; // drop $events expando to avoid firing incorrect events - return a; + // Need to remove events on the element and its descendants + var $this = this.add(this.find("*")); + $this.each(function() { + this._$events = {}; + for (var type in this.$events) + this._$events[type] = jQuery.extend({},this.$events[type]); + }).unbind(); + + // Do the clone + var r = this.pushStack( jQuery.map( this, function(a){ + return a.cloneNode( deep != undefined ? deep : true ); }) ); + + // Add the events back to the original and its descendants + $this.each(function() { + var events = this._$events; + for (var type in events) + for (var handler in events[type]) + jQuery.event.add(this, type, events[type][handler], events[type][handler].data); + this._$events = null; + }); + + // Return the cloned set + return r; }, /** @@ -1423,7 +1442,7 @@ jQuery.extend({ return ret == "" ? "1" : ret; } - if (prop == "float" || prop == "cssFloat") + if (prop.match(/float/i)) prop = jQuery.browser.msie ? "styleFloat" : "cssFloat"; if (!force && elem.style[prop]) @@ -1431,7 +1450,7 @@ jQuery.extend({ else if (document.defaultView && document.defaultView.getComputedStyle) { - if (prop == "cssFloat" || prop == "styleFloat") + if (prop.match(/float/i)) prop = "float"; prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase(); @@ -1465,13 +1484,13 @@ jQuery.extend({ if ( arg.constructor == Number ) arg = arg.toString(); - // Convert html string into DOM nodes + // Convert html string into DOM nodes if ( typeof arg == "string" ) { // Trim whitespace, otherwise indexOf won't work as expected var s = jQuery.trim(arg).toLowerCase(), div = doc.createElement("div"), tb = []; var wrap = - // option or optgroup + // option or optgroup !s.indexOf("", ""] || @@ -1523,7 +1542,7 @@ jQuery.extend({ if ( 0 === arg.length && !jQuery(arg).is("form, select") ) return; - if ( arg[0] == undefined || jQuery(arg).is("form, select") ) + if ( arg[0] == undefined || jQuery.nodeName(arg, "form") || arg.options ) r.push( arg ); else r = jQuery.merge( r, arg ); @@ -1539,13 +1558,15 @@ jQuery.extend({ "class": "className", "float": jQuery.browser.msie ? "styleFloat" : "cssFloat", cssFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat", + styleFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat", innerHTML: "innerHTML", className: "className", value: "value", disabled: "disabled", checked: "checked", readonly: "readOnly", - selected: "selected" + selected: "selected", + maxlength: "maxLength" }; // IE actually uses filters for opacity ... elem is actually elem.style