X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fjquery%2Fjquery.js;h=a8872dfb8e17236f951e6f318809a246beb92f47;hb=ec2b688920cf38f5bb2487b8a1897f7eb7557248;hp=30396caccf29f227e5315f6cd4682865d40a49d3;hpb=26034c4a2985c18c6c702f1c609001f859e33654;p=jquery.git diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js index 30396ca..a8872df 100644 --- a/src/jquery/jquery.js +++ b/src/jquery/jquery.js @@ -614,10 +614,13 @@ jQuery.fn = jQuery.prototype = { */ wrap: function() { // The elements to wrap the target around - var a = jQuery.clean(arguments); + var a, args = arguments; // Wrap each of the matched elements individually return this.each(function(){ + if ( !a ) + a = jQuery.clean(args, this.ownerDocument); + // Clone the structure that we're using to wrap var b = a[0].cloneNode(true); @@ -814,9 +817,9 @@ jQuery.fn = jQuery.prototype = { * @cat DOM/Traversing */ find: function(t) { - return this.pushStack( jQuery.map( this, function(a){ + return this.pushStack( jQuery.unique( jQuery.map( this, function(a){ return jQuery.find(t,a); - }), t ); + }) ), t ); }, /** @@ -1038,7 +1041,7 @@ jQuery.fn = jQuery.prototype = { * @cat DOM/Traversing */ is: function(expr) { - return expr ? jQuery.filter(expr,this).r.length > 0 : false; + return expr ? jQuery.multiFilter(expr,this).length > 0 : false; }, /** @@ -1121,12 +1124,15 @@ jQuery.fn = jQuery.prototype = { * @cat Core */ domManip: function(args, table, dir, fn){ - var clone = this.length > 1; - var a = jQuery.clean(args); - if ( dir < 0 ) - a.reverse(); + var clone = this.length > 1, a; return this.each(function(){ + if ( !a ) { + a = jQuery.clean(args, this.ownerDocument); + if ( dir < 0 ) + a.reverse(); + } + var obj = this; if ( table && jQuery.nodeName(this, "table") && jQuery.nodeName(a[0], "tr") ) @@ -1403,8 +1409,10 @@ jQuery.extend({ curCSS: function(elem, prop, force) { var ret; - if (prop == "opacity" && jQuery.browser.msie) - return jQuery.attr(elem.style, "opacity"); + if (prop == "opacity" && jQuery.browser.msie) { + ret = jQuery.attr(elem.style, "opacity"); + return ret == "" ? "1" : ret; + } if (prop == "float" || prop == "cssFloat") prop = jQuery.browser.msie ? "styleFloat" : "cssFloat"; @@ -1438,8 +1446,9 @@ jQuery.extend({ return ret; }, - clean: function(a) { + clean: function(a, doc) { var r = []; + doc = doc || document; jQuery.each( a, function(i,arg){ if ( !arg ) return; @@ -1450,7 +1459,7 @@ jQuery.extend({ // Convert html string into DOM nodes if ( typeof arg == "string" ) { // Trim whitespace, otherwise indexOf won't work as expected - var s = jQuery.trim(arg), div = document.createElement("div"), tb = []; + var s = jQuery.trim(arg), div = doc.createElement("div"), tb = []; var wrap = // option or optgroup @@ -1537,7 +1546,7 @@ jQuery.extend({ } return elem.filter ? - (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : "1"; + (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : ""; } // Certain attributes only work when accessed via the old DOM 0 way @@ -1620,19 +1629,26 @@ jQuery.extend({ * @cat JavaScript */ merge: function(first, second) { - var r = [].slice.call( first, 0 ); - - // Now check for duplicates between the two arrays - // and only add the unique items for ( var i = 0, sl = second.length; i < sl; i++ ) - // Check for duplicates - if ( jQuery.inArray( second[i], r ) == -1 ) - // The item is unique, add it - first.push( second[i] ); + first.push(second[i]); return first; }, + unique: function(first) { + var r = [], num = jQuery.mergeNum++; + + for ( var i = 0, fl = first.length; i < fl; i++ ) + if ( first[i].mergeNum != num ) { + first[i].mergeNum = num; + r.push(first[i]); + } + + return r; + }, + + mergeNum: 0, + /** * Filter items out of an array, by using a filter function. * @@ -1726,17 +1742,7 @@ jQuery.extend({ } } - var r = result.length ? [ result[0] ] : []; - - check: for ( var i = 1, rl = result.length; i < rl; i++ ) { - for ( var j = 0; j < i; j++ ) - if ( result[i] == r[j] ) - continue check; - - r.push( result[i] ); - } - - return r; + return result; } });