},
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] );
wrap.map(function(){
var elem = this;
- while ( elem.firstChild )
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 )
elem = elem.firstChild;
return elem;
},
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 ( first )
- for ( var i = 0, l = this.length; i < l; i++ )
- callback.call( root(this[i], first), this.length > 1 || i > 0 ?
- fragment.cloneNode(true) : fragment );
-
- if ( scripts )
+ if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && args[0].indexOf("<option") < 0 ) {
+ cacheable = true;
+ cacheresults = jQuery.fragments[ args[0] ];
+ if ( cacheresults ) {
+ if ( cacheresults !== 1 ) {
+ fragment = cacheresults;
+ }
+ cached = true;
+ }
+ }
+
+ if ( !fragment ) {
+ fragment = (this[0].ownerDocument || this[0]).createDocumentFragment();
+ scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment );
+ }
+
+ first = fragment.firstChild;
+
+ 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;
}
});
+jQuery.fragments = {};
+
jQuery.each({
appendTo: "append",
prependTo: "prepend",
remove: function( selector ) {
if ( !selector || jQuery.multiFilter( selector, [ this ] ).length ) {
if ( this.nodeType === 1 ) {
- cleanData( this.getElementsByTagName("*") );
- cleanData( [this] );
+ cleanData( jQuery("*", this).add(this) );
}
if ( this.parentNode ) {
empty: function() {
// Remove element nodes and prevent memory leaks
if ( this.nodeType === 1 ) {
- cleanData( this.getElementsByTagName("*") );
+ cleanData( jQuery("*", this) );
}
// Remove any remaining nodes
if ( typeof elem === "string" ) {
// Fix "XHTML"-style tags in all browsers
elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
- return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
+ return /^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i.test(tag) ?
all :
front + "></" + tag + ">";
});
!tags.indexOf("<leg") &&
[ 1, "<fieldset>", "</fieldset>" ] ||
- tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
+ /^<(thead|tbody|tfoot|colg|cap)/.test(tags) &&
[ 1, "<table>", "</table>" ] ||
!tags.indexOf("<tr") &&
// IE completely kills leading whitespace when innerHTML is used
if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
- div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
-
+ div.insertBefore( context.createTextNode( /^\s*/.exec(elem)[0] ), div.firstChild );
+
elem = jQuery.makeArray( div.childNodes );
}
fragment.appendChild( ret[i] );
}
}
-
+
return scripts;
}