X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fmanipulation.js;h=55017c196ff82a15ec3cd6c6a9143c0427c80b24;hb=190812c3be99bde536d373b6b6ab65cfe053a532;hp=13983fb016ef700f0e43e8b9b4e3f58a89c0b2fb;hpb=4a99fcf6e4b152706b951df584614da32b08f6e4;p=jquery.git diff --git a/src/manipulation.js b/src/manipulation.js index 13983fb..55017c1 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -18,9 +18,13 @@ jQuery.fn.extend({ }, wrapAll: function( html ) { + if(jQuery.isFunction(html)) { + return this.each(function() { jQuery(this).wrapAll(html.call(this)); }); + } + if ( this[0] ) { // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).clone(); + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(); if ( this[0].parentNode ) wrap.insertBefore( this[0] ); @@ -28,7 +32,7 @@ jQuery.fn.extend({ wrap.map(function(){ var elem = this; - while ( elem.firstChild ) + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) elem = elem.firstChild; return elem; @@ -137,24 +141,63 @@ jQuery.fn.extend({ }, domManip: function( args, table, callback ) { + var fragment, scripts, cacheable, cached, cacheresults, first; + var value = args[0]; + + if ( jQuery.isFunction(value) ) { + return this.each(function() { + args[0] = value.call(this); + return jQuery(this).domManip( args, table, callback ); + }); + }; + if ( this[0] ) { - var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), - scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), - first = fragment.firstChild; + if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf(" 1 || i > 0 ? - fragment.cloneNode(true) : fragment ); + first = fragment.firstChild; - if ( scripts ) + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + + for ( var i = 0, l = this.length; i < l; i++ ) { + callback.call( + table ? + root(this[i], first) : + this[i], + cacheable || this.length > 1 || i > 0 ? + fragment.cloneNode(true) : + fragment + ); + } + } + + if ( scripts ) { jQuery.each( scripts, evalScript ); + } + + if ( cacheable ) { + jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1; + } } return this; function root( elem, cur ) { - return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? + return jQuery.nodeName(elem, "table") ? (elem.getElementsByTagName("tbody")[0] || elem.appendChild(elem.ownerDocument.createElement("tbody"))) : elem; @@ -162,6 +205,8 @@ jQuery.fn.extend({ } }); +jQuery.fragments = {}; + jQuery.each({ appendTo: "append", prependTo: "prepend",