X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=52b524a748d1c223f0ff4083d051b1182ba708bb;hb=7e03645a5534fc582847df6ece72aec516487b47;hp=61a190e80e1d2b6ce8cb05e6a0518d8a044f5906;hpb=d0c68580e500a4b9ffd0bf577d82df6d0320659a;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 61a190e..52b524a 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -176,7 +176,7 @@ jQuery.fn = jQuery.prototype = { // HANDLE: $(arraylike) // Watch for when an array-like object is passed as the selector - (a.jquery || a.length && a != window && (!a.nodeType || (jQuery.browser.msie && a.elements)) && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) || + (a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) || // HANDLE: $(*) [ a ] ); @@ -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("", ""] || @@ -1539,6 +1558,7 @@ 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", @@ -1624,24 +1644,16 @@ jQuery.extend({ }, /** - * Merge two arrays together, removing all duplicates. - * - * The result is the altered first argument with - * the unique elements from the second array added. + * Merge two arrays together by concatenating them. * * @example $.merge( [0,1,2], [2,3,4] ) - * @result [0,1,2,3,4] - * @desc Merges two arrays, removing the duplicate 2 - * - * @example var array = [3,2,1]; - * $.merge( array, [4,3,2] ) - * @result array == [3,2,1,4] - * @desc Merges two arrays, removing the duplicates 3 and 2 + * @result [0,1,2,2,3,4] + * @desc Merges two arrays. * * @name $.merge * @type Array - * @param Array first The first array to merge, the unique elements of second added. - * @param Array second The second array to merge into the first, unaltered. + * @param Array first The first array to merge, the elements of second are added. + * @param Array second The second array to append to the first, unaltered. * @cat JavaScript */ merge: function(first, second) { @@ -1652,6 +1664,18 @@ jQuery.extend({ return first; }, + /** + * Reduce an array (of jQuery objects only) to its unique elements. + * + * @example $.unique( [x1, x2, x3, x2, x3] ) + * @result [x1, x2, x3] + * @desc Reduces the arrays of jQuery objects to unique elements by removing the duplicates of x2 and x3 + * + * @name $.unique + * @type Array + * @param Array array The array to reduce to its unique jQuery objects. + * @cat JavaScript + */ unique: function(first) { var r = [], num = jQuery.mergeNum++; @@ -1746,7 +1770,7 @@ jQuery.extend({ if ( typeof fn == "string" ) fn = new Function("a","return " + fn); - var result = [], r = []; + var result = []; // Go through the array, translating each of the items to their // new value (or values).