2010-09-08 17:54:33 +00:00
|
|
|
(function( jQuery ) {
|
|
|
|
|
2011-09-28 15:39:05 +00:00
|
|
|
function createSafeFragment( document ) {
|
2011-11-08 02:22:04 +00:00
|
|
|
var list = nodeNames.split( "|" ),
|
2011-09-28 15:39:05 +00:00
|
|
|
safeFrag = document.createDocumentFragment();
|
|
|
|
|
|
|
|
if ( safeFrag.createElement ) {
|
2011-10-23 20:07:07 +00:00
|
|
|
while ( list.length ) {
|
2011-09-28 15:39:05 +00:00
|
|
|
safeFrag.createElement(
|
2011-10-23 20:07:07 +00:00
|
|
|
list.pop()
|
2011-09-28 15:39:05 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return safeFrag;
|
|
|
|
}
|
|
|
|
|
2011-12-18 15:54:30 +00:00
|
|
|
var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
|
2011-11-08 02:22:04 +00:00
|
|
|
"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
|
2011-10-23 20:07:07 +00:00
|
|
|
rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
|
2009-07-19 15:48:30 +00:00
|
|
|
rleadingWhitespace = /^\s+/,
|
2010-09-22 13:16:28 +00:00
|
|
|
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
|
2009-10-12 16:26:01 +00:00
|
|
|
rtagName = /<([\w:]+)/,
|
2009-07-19 15:57:43 +00:00
|
|
|
rtbody = /<tbody/i,
|
2010-02-06 00:58:08 +00:00
|
|
|
rhtml = /<|&#?\w+;/,
|
2011-02-25 19:40:05 +00:00
|
|
|
rnoInnerhtml = /<(?:script|style)/i,
|
2010-09-22 13:16:28 +00:00
|
|
|
rnocache = /<(?:script|object|embed|option|style)/i,
|
2011-11-08 02:22:04 +00:00
|
|
|
rnoshimcache = new RegExp("<(?:" + nodeNames + ")", "i"),
|
2011-01-24 10:18:57 +00:00
|
|
|
// checked="checked" or checked
|
2010-11-09 15:34:32 +00:00
|
|
|
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
|
2011-04-12 20:39:30 +00:00
|
|
|
rscriptType = /\/(java|ecma)script/i,
|
2011-05-11 12:12:19 +00:00
|
|
|
rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
|
2009-09-07 20:55:36 +00:00
|
|
|
wrapMap = {
|
|
|
|
option: [ 1, "<select multiple='multiple'>", "</select>" ],
|
|
|
|
legend: [ 1, "<fieldset>", "</fieldset>" ],
|
|
|
|
thead: [ 1, "<table>", "</table>" ],
|
|
|
|
tr: [ 2, "<table><tbody>", "</tbody></table>" ],
|
|
|
|
td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
|
|
|
|
col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
|
2009-12-07 01:26:39 +00:00
|
|
|
area: [ 1, "<map>", "</map>" ],
|
2009-09-07 20:55:36 +00:00
|
|
|
_default: [ 0, "", "" ]
|
2011-09-19 20:42:36 +00:00
|
|
|
},
|
2011-09-28 14:06:29 +00:00
|
|
|
safeFragment = createSafeFragment( document );
|
2009-07-19 15:48:30 +00:00
|
|
|
|
2009-09-07 20:55:36 +00:00
|
|
|
wrapMap.optgroup = wrapMap.option;
|
|
|
|
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
|
|
|
|
wrapMap.th = wrapMap.td;
|
|
|
|
|
|
|
|
// IE can't serialize <link> and <script> tags normally
|
|
|
|
if ( !jQuery.support.htmlSerialize ) {
|
|
|
|
wrapMap._default = [ 1, "div<div>", "</div>" ];
|
|
|
|
}
|
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
jQuery.fn.extend({
|
2011-12-06 20:25:38 +00:00
|
|
|
text: function( value ) {
|
|
|
|
return jQuery.access( this, function( value ) {
|
|
|
|
return value === undefined ?
|
|
|
|
jQuery.text( this ) :
|
|
|
|
this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
|
|
|
|
}, null, value, arguments.length );
|
2009-03-18 21:15:38 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
wrapAll: function( html ) {
|
2009-07-19 15:29:03 +00:00
|
|
|
if ( jQuery.isFunction( html ) ) {
|
2010-01-06 20:08:07 +00:00
|
|
|
return this.each(function(i) {
|
|
|
|
jQuery(this).wrapAll( html.call(this, i) );
|
2009-07-19 15:29:03 +00:00
|
|
|
});
|
2009-07-12 21:08:54 +00:00
|
|
|
}
|
2009-07-21 09:17:33 +00:00
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
if ( this[0] ) {
|
|
|
|
// The elements to wrap the target around
|
2009-12-08 19:21:24 +00:00
|
|
|
var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2009-07-19 15:29:03 +00:00
|
|
|
if ( this[0].parentNode ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
wrap.insertBefore( this[0] );
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2009-12-22 00:58:13 +00:00
|
|
|
wrap.map(function() {
|
2009-03-18 21:15:38 +00:00
|
|
|
var elem = this;
|
|
|
|
|
2009-07-19 15:29:03 +00:00
|
|
|
while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
elem = elem.firstChild;
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
|
|
|
return elem;
|
2011-04-22 01:51:23 +00:00
|
|
|
}).append( this );
|
2009-03-18 21:15:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
wrapInner: function( html ) {
|
2010-01-26 00:16:23 +00:00
|
|
|
if ( jQuery.isFunction( html ) ) {
|
|
|
|
return this.each(function(i) {
|
|
|
|
jQuery(this).wrapInner( html.call(this, i) );
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2009-12-22 00:58:13 +00:00
|
|
|
return this.each(function() {
|
2010-11-09 16:09:07 +00:00
|
|
|
var self = jQuery( this ),
|
|
|
|
contents = self.contents();
|
2010-01-11 21:31:31 +00:00
|
|
|
|
|
|
|
if ( contents.length ) {
|
|
|
|
contents.wrapAll( html );
|
|
|
|
|
|
|
|
} else {
|
|
|
|
self.append( html );
|
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
wrap: function( html ) {
|
2011-11-06 21:59:41 +00:00
|
|
|
var isFunction = jQuery.isFunction( html );
|
|
|
|
|
|
|
|
return this.each(function(i) {
|
|
|
|
jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
|
2009-03-18 21:15:38 +00:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
2009-09-25 21:41:21 +00:00
|
|
|
unwrap: function() {
|
2009-12-22 00:58:13 +00:00
|
|
|
return this.parent().each(function() {
|
2009-09-25 21:41:21 +00:00
|
|
|
if ( !jQuery.nodeName( this, "body" ) ) {
|
|
|
|
jQuery( this ).replaceWith( this.childNodes );
|
|
|
|
}
|
|
|
|
}).end();
|
|
|
|
},
|
2009-12-10 04:57:19 +00:00
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
append: function() {
|
2009-12-22 00:58:13 +00:00
|
|
|
return this.domManip(arguments, true, function( elem ) {
|
2009-07-19 15:29:03 +00:00
|
|
|
if ( this.nodeType === 1 ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
this.appendChild( elem );
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
prepend: function() {
|
2009-12-22 00:58:13 +00:00
|
|
|
return this.domManip(arguments, true, function( elem ) {
|
2009-07-19 15:29:03 +00:00
|
|
|
if ( this.nodeType === 1 ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
this.insertBefore( elem, this.firstChild );
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
before: function() {
|
2009-09-14 22:09:42 +00:00
|
|
|
if ( this[0] && this[0].parentNode ) {
|
2009-12-22 00:58:13 +00:00
|
|
|
return this.domManip(arguments, false, function( elem ) {
|
2009-09-14 22:09:42 +00:00
|
|
|
this.parentNode.insertBefore( elem, this );
|
|
|
|
});
|
A follow-up to [6578] (which stopped adding expandos to elements that didn't have data). That broke jQuery.unique() (so we're now using the unique from Sizzle). Using Sizzle's unique (which also sorts in document order) changed how add, andSelf, parents, nextAll, prevAll, and siblings work. after and before were changed to not use .add() (in order to guarantee their position in the jQuery set). Also, jQuery.data(elem) was updated to return that element's data object (instead of its ID).
$("<div/>").after("<span/>")
=> [ div, span ]
(calling after on a disconnected DOM node adds the nodes to the end of the jQuery set)
$("<div/>").before("<span/>")
=> [ span, div ]
(calling before on a disconnected DOM node adds the nodes to the beginning of the jQuery set)
$("div").add("span")
=> [ div, span, span, div, span ]
(results now come out in document order)
$("div").find("code").andSelf();
=> [ div, code, code ]
(results now come out in document order)
Same goes for .parents(), .nextAll(), .prevAll(), and .siblings().
Exception: .parents() will still return the results in reverse document order.
jQuery.data(elem)
=> { object of data }
(no longer returns the unique ID assigned to the node)
2009-09-25 17:55:20 +00:00
|
|
|
} else if ( arguments.length ) {
|
2011-11-17 16:47:56 +00:00
|
|
|
var set = jQuery.clean( arguments );
|
A follow-up to [6578] (which stopped adding expandos to elements that didn't have data). That broke jQuery.unique() (so we're now using the unique from Sizzle). Using Sizzle's unique (which also sorts in document order) changed how add, andSelf, parents, nextAll, prevAll, and siblings work. after and before were changed to not use .add() (in order to guarantee their position in the jQuery set). Also, jQuery.data(elem) was updated to return that element's data object (instead of its ID).
$("<div/>").after("<span/>")
=> [ div, span ]
(calling after on a disconnected DOM node adds the nodes to the end of the jQuery set)
$("<div/>").before("<span/>")
=> [ span, div ]
(calling before on a disconnected DOM node adds the nodes to the beginning of the jQuery set)
$("div").add("span")
=> [ div, span, span, div, span ]
(results now come out in document order)
$("div").find("code").andSelf();
=> [ div, code, code ]
(results now come out in document order)
Same goes for .parents(), .nextAll(), .prevAll(), and .siblings().
Exception: .parents() will still return the results in reverse document order.
jQuery.data(elem)
=> { object of data }
(no longer returns the unique ID assigned to the node)
2009-09-25 17:55:20 +00:00
|
|
|
set.push.apply( set, this.toArray() );
|
|
|
|
return this.pushStack( set, "before", arguments );
|
2009-09-14 22:09:42 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
after: function() {
|
2009-09-14 22:09:42 +00:00
|
|
|
if ( this[0] && this[0].parentNode ) {
|
2009-12-22 00:58:13 +00:00
|
|
|
return this.domManip(arguments, false, function( elem ) {
|
2009-09-14 22:09:42 +00:00
|
|
|
this.parentNode.insertBefore( elem, this.nextSibling );
|
|
|
|
});
|
A follow-up to [6578] (which stopped adding expandos to elements that didn't have data). That broke jQuery.unique() (so we're now using the unique from Sizzle). Using Sizzle's unique (which also sorts in document order) changed how add, andSelf, parents, nextAll, prevAll, and siblings work. after and before were changed to not use .add() (in order to guarantee their position in the jQuery set). Also, jQuery.data(elem) was updated to return that element's data object (instead of its ID).
$("<div/>").after("<span/>")
=> [ div, span ]
(calling after on a disconnected DOM node adds the nodes to the end of the jQuery set)
$("<div/>").before("<span/>")
=> [ span, div ]
(calling before on a disconnected DOM node adds the nodes to the beginning of the jQuery set)
$("div").add("span")
=> [ div, span, span, div, span ]
(results now come out in document order)
$("div").find("code").andSelf();
=> [ div, code, code ]
(results now come out in document order)
Same goes for .parents(), .nextAll(), .prevAll(), and .siblings().
Exception: .parents() will still return the results in reverse document order.
jQuery.data(elem)
=> { object of data }
(no longer returns the unique ID assigned to the node)
2009-09-25 17:55:20 +00:00
|
|
|
} else if ( arguments.length ) {
|
|
|
|
var set = this.pushStack( this, "after", arguments );
|
2011-11-17 16:47:56 +00:00
|
|
|
set.push.apply( set, jQuery.clean(arguments) );
|
A follow-up to [6578] (which stopped adding expandos to elements that didn't have data). That broke jQuery.unique() (so we're now using the unique from Sizzle). Using Sizzle's unique (which also sorts in document order) changed how add, andSelf, parents, nextAll, prevAll, and siblings work. after and before were changed to not use .add() (in order to guarantee their position in the jQuery set). Also, jQuery.data(elem) was updated to return that element's data object (instead of its ID).
$("<div/>").after("<span/>")
=> [ div, span ]
(calling after on a disconnected DOM node adds the nodes to the end of the jQuery set)
$("<div/>").before("<span/>")
=> [ span, div ]
(calling before on a disconnected DOM node adds the nodes to the beginning of the jQuery set)
$("div").add("span")
=> [ div, span, span, div, span ]
(results now come out in document order)
$("div").find("code").andSelf();
=> [ div, code, code ]
(results now come out in document order)
Same goes for .parents(), .nextAll(), .prevAll(), and .siblings().
Exception: .parents() will still return the results in reverse document order.
jQuery.data(elem)
=> { object of data }
(no longer returns the unique ID assigned to the node)
2009-09-25 17:55:20 +00:00
|
|
|
return set;
|
2009-09-14 22:09:42 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
},
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 20:25:52 +00:00
|
|
|
// keepData is for internal use only--do not document
|
|
|
|
remove: function( selector, keepData ) {
|
|
|
|
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
|
|
|
|
if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
|
|
|
|
if ( !keepData && elem.nodeType === 1 ) {
|
|
|
|
jQuery.cleanData( elem.getElementsByTagName("*") );
|
|
|
|
jQuery.cleanData( [ elem ] );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( elem.parentNode ) {
|
2011-02-10 02:15:32 +00:00
|
|
|
elem.parentNode.removeChild( elem );
|
2010-01-28 20:25:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 20:25:52 +00:00
|
|
|
return this;
|
|
|
|
},
|
|
|
|
|
|
|
|
empty: function() {
|
|
|
|
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
|
|
|
|
// Remove element nodes and prevent memory leaks
|
|
|
|
if ( elem.nodeType === 1 ) {
|
|
|
|
jQuery.cleanData( elem.getElementsByTagName("*") );
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove any remaining nodes
|
|
|
|
while ( elem.firstChild ) {
|
|
|
|
elem.removeChild( elem.firstChild );
|
|
|
|
}
|
|
|
|
}
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 20:25:52 +00:00
|
|
|
return this;
|
|
|
|
},
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-01-20 20:25:04 +00:00
|
|
|
clone: function( dataAndEvents, deepDataAndEvents ) {
|
2011-02-01 13:57:18 +00:00
|
|
|
dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
|
2011-01-20 20:25:04 +00:00
|
|
|
deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
|
2011-01-28 16:55:39 +00:00
|
|
|
|
2011-01-20 19:25:56 +00:00
|
|
|
return this.map( function () {
|
2011-01-20 20:25:04 +00:00
|
|
|
return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
|
2009-03-18 21:15:38 +00:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
html: function( value ) {
|
2011-12-06 20:25:38 +00:00
|
|
|
return jQuery.access( this, function( value ) {
|
|
|
|
var elem = this[0] || {},
|
|
|
|
i = 0,
|
|
|
|
l = this.length;
|
|
|
|
|
|
|
|
if ( value === undefined ) {
|
|
|
|
return elem.nodeType === 1 ?
|
|
|
|
elem.innerHTML.replace( rinlinejQuery, "" ) :
|
|
|
|
null;
|
2009-09-07 20:55:36 +00:00
|
|
|
}
|
|
|
|
|
2010-11-09 16:09:07 +00:00
|
|
|
|
2011-12-06 20:25:38 +00:00
|
|
|
if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
|
|
|
|
( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
|
|
|
|
!wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
|
2010-01-07 18:33:30 +00:00
|
|
|
|
2011-12-06 20:25:38 +00:00
|
|
|
value = value.replace( rxhtmlTag, "<$1></$2>" );
|
2009-09-07 20:55:36 +00:00
|
|
|
|
2011-12-06 20:25:38 +00:00
|
|
|
try {
|
|
|
|
for (; i < l; i++ ) {
|
|
|
|
// Remove element nodes and prevent memory leaks
|
|
|
|
elem = this[i] || {};
|
|
|
|
if ( elem.nodeType === 1 ) {
|
|
|
|
jQuery.cleanData( elem.getElementsByTagName( "*" ) );
|
|
|
|
elem.innerHTML = value;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
elem = 0;
|
|
|
|
|
|
|
|
// If using innerHTML throws an exception, use the fallback method
|
|
|
|
} catch(e) {}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( elem ) {
|
|
|
|
this.empty().append( value );
|
|
|
|
}
|
|
|
|
}, null, value, arguments.length );
|
2009-03-18 21:15:38 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
replaceWith: function( value ) {
|
2009-09-14 22:09:42 +00:00
|
|
|
if ( this[0] && this[0].parentNode ) {
|
2010-01-11 21:25:01 +00:00
|
|
|
// Make sure that the elements are removed from the DOM before they are inserted
|
|
|
|
// this can help fix replacing a parent with child elements
|
2010-02-02 02:48:05 +00:00
|
|
|
if ( jQuery.isFunction( value ) ) {
|
2010-01-26 00:22:28 +00:00
|
|
|
return this.each(function(i) {
|
|
|
|
var self = jQuery(this), old = self.html();
|
|
|
|
self.replaceWith( value.call( this, i, old ) );
|
|
|
|
});
|
2010-01-11 21:25:01 +00:00
|
|
|
}
|
|
|
|
|
2010-02-02 02:48:05 +00:00
|
|
|
if ( typeof value !== "string" ) {
|
2010-11-09 16:09:07 +00:00
|
|
|
value = jQuery( value ).detach();
|
2010-02-02 02:48:05 +00:00
|
|
|
}
|
|
|
|
|
2009-12-22 00:58:13 +00:00
|
|
|
return this.each(function() {
|
2010-11-09 16:09:07 +00:00
|
|
|
var next = this.nextSibling,
|
|
|
|
parent = this.parentNode;
|
2009-12-05 20:30:36 +00:00
|
|
|
|
2010-11-09 16:09:07 +00:00
|
|
|
jQuery( this ).remove();
|
2009-12-05 20:30:36 +00:00
|
|
|
|
|
|
|
if ( next ) {
|
|
|
|
jQuery(next).before( value );
|
|
|
|
} else {
|
|
|
|
jQuery(parent).append( value );
|
|
|
|
}
|
|
|
|
});
|
2009-09-14 22:09:42 +00:00
|
|
|
} else {
|
2011-03-14 20:17:02 +00:00
|
|
|
return this.length ?
|
2011-03-05 15:46:12 +00:00
|
|
|
this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
|
|
|
|
this;
|
2009-09-14 22:09:42 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
},
|
|
|
|
|
2009-07-21 15:57:51 +00:00
|
|
|
detach: function( selector ) {
|
|
|
|
return this.remove( selector, true );
|
|
|
|
},
|
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
domManip: function( args, table, callback ) {
|
2010-11-09 16:09:07 +00:00
|
|
|
var results, first, fragment, parent,
|
|
|
|
value = args[0],
|
|
|
|
scripts = [];
|
2009-07-12 20:19:43 +00:00
|
|
|
|
2010-01-25 23:43:33 +00:00
|
|
|
// We can't cloneNode fragments that contain checked, in WebKit
|
|
|
|
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
|
|
|
|
return this.each(function() {
|
|
|
|
jQuery(this).domManip( args, table, callback, true );
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2009-07-12 20:19:43 +00:00
|
|
|
if ( jQuery.isFunction(value) ) {
|
2010-01-06 20:08:07 +00:00
|
|
|
return this.each(function(i) {
|
|
|
|
var self = jQuery(this);
|
|
|
|
args[0] = value.call(this, i, table ? self.html() : undefined);
|
2010-01-25 23:43:33 +00:00
|
|
|
self.domManip( args, table, callback );
|
2009-07-12 20:19:43 +00:00
|
|
|
});
|
2009-07-19 15:48:30 +00:00
|
|
|
}
|
2009-07-11 13:49:46 +00:00
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
if ( this[0] ) {
|
2010-02-13 07:49:04 +00:00
|
|
|
parent = value && value.parentNode;
|
|
|
|
|
2009-09-07 18:58:01 +00:00
|
|
|
// If we're in a fragment, just use that instead of building a new one
|
2010-02-13 08:14:00 +00:00
|
|
|
if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
|
2010-02-13 07:49:04 +00:00
|
|
|
results = { fragment: parent };
|
|
|
|
|
2009-09-07 18:58:01 +00:00
|
|
|
} else {
|
2010-09-08 22:13:35 +00:00
|
|
|
results = jQuery.buildFragment( args, this, scripts );
|
2009-07-11 13:49:46 +00:00
|
|
|
}
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 22:18:27 +00:00
|
|
|
fragment = results.fragment;
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 22:18:27 +00:00
|
|
|
if ( fragment.childNodes.length === 1 ) {
|
|
|
|
first = fragment = fragment.firstChild;
|
|
|
|
} else {
|
|
|
|
first = fragment.firstChild;
|
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2009-07-11 13:49:46 +00:00
|
|
|
if ( first ) {
|
|
|
|
table = table && jQuery.nodeName( first, "tr" );
|
2009-03-23 01:55:17 +00:00
|
|
|
|
2011-01-28 16:55:39 +00:00
|
|
|
for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
|
2009-07-11 13:49:46 +00:00
|
|
|
callback.call(
|
|
|
|
table ?
|
|
|
|
root(this[i], first) :
|
|
|
|
this[i],
|
2011-01-28 16:55:39 +00:00
|
|
|
// Make sure that we do not leak memory by inadvertently discarding
|
|
|
|
// the original fragment (which might have attached data) instead of
|
|
|
|
// using it; in addition, use the original fragment object for the last
|
|
|
|
// item instead of first because it can end up being emptied incorrectly
|
|
|
|
// in certain situations (Bug #8070).
|
|
|
|
// Fragments from the fragment cache must always be cloned and never used
|
|
|
|
// in place.
|
2011-10-27 19:32:49 +00:00
|
|
|
results.cacheable || ( l > 1 && i < lastIndex ) ?
|
2011-01-20 19:25:56 +00:00
|
|
|
jQuery.clone( fragment, true, true ) :
|
2010-01-28 22:18:27 +00:00
|
|
|
fragment
|
2009-07-11 13:49:46 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-01-28 22:18:27 +00:00
|
|
|
if ( scripts.length ) {
|
2011-12-09 02:27:05 +00:00
|
|
|
jQuery.each( scripts, function( i, elem ) {
|
|
|
|
if ( elem.src ) {
|
|
|
|
jQuery.ajax({
|
|
|
|
url: elem.src,
|
|
|
|
async: false,
|
|
|
|
dataType: "script"
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( elem.parentNode ) {
|
|
|
|
elem.parentNode.removeChild( elem );
|
|
|
|
}
|
|
|
|
});
|
2009-07-11 13:49:46 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2010-03-02 02:24:49 +00:00
|
|
|
function root( elem, cur ) {
|
|
|
|
return jQuery.nodeName(elem, "table") ?
|
|
|
|
(elem.getElementsByTagName("tbody")[0] ||
|
|
|
|
elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
|
|
|
|
elem;
|
|
|
|
}
|
|
|
|
|
2011-01-20 19:25:56 +00:00
|
|
|
function cloneCopyEvent( src, dest ) {
|
2009-12-02 22:15:09 +00:00
|
|
|
|
2011-01-20 19:25:56 +00:00
|
|
|
if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
|
|
|
|
return;
|
|
|
|
}
|
2010-12-22 15:13:28 +00:00
|
|
|
|
2011-09-19 20:13:14 +00:00
|
|
|
var type, i, l,
|
|
|
|
oldData = jQuery._data( src ),
|
|
|
|
curData = jQuery._data( dest, oldData ),
|
|
|
|
events = oldData.events;
|
|
|
|
|
|
|
|
if ( events ) {
|
|
|
|
delete curData.handle;
|
|
|
|
curData.events = {};
|
|
|
|
|
|
|
|
for ( type in events ) {
|
|
|
|
for ( i = 0, l = events[ type ].length; i < l; i++ ) {
|
|
|
|
jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
|
2009-12-22 17:04:17 +00:00
|
|
|
}
|
|
|
|
}
|
2011-01-20 19:25:56 +00:00
|
|
|
}
|
2011-09-19 20:13:14 +00:00
|
|
|
|
|
|
|
// make the cloned public data object a copy from the original
|
|
|
|
if ( curData.data ) {
|
|
|
|
curData.data = jQuery.extend( {}, curData.data );
|
|
|
|
}
|
2009-12-02 22:15:09 +00:00
|
|
|
}
|
|
|
|
|
2011-03-08 17:07:05 +00:00
|
|
|
function cloneFixAttributes( src, dest ) {
|
2011-04-22 01:51:23 +00:00
|
|
|
var nodeName;
|
|
|
|
|
2010-12-13 01:23:22 +00:00
|
|
|
// We do not need to do anything for non-Elements
|
|
|
|
if ( dest.nodeType !== 1 ) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// clearAttributes removes the attributes, which we don't want,
|
|
|
|
// but also removes the attachEvent events, which we *do* want
|
2011-04-14 03:45:58 +00:00
|
|
|
if ( dest.clearAttributes ) {
|
|
|
|
dest.clearAttributes();
|
|
|
|
}
|
2010-12-13 01:23:22 +00:00
|
|
|
|
|
|
|
// mergeAttributes, in contrast, only merges back on the
|
|
|
|
// original attributes, not the events
|
2011-04-14 03:45:58 +00:00
|
|
|
if ( dest.mergeAttributes ) {
|
|
|
|
dest.mergeAttributes( src );
|
|
|
|
}
|
2010-12-13 01:23:22 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
nodeName = dest.nodeName.toLowerCase();
|
|
|
|
|
2010-12-13 01:23:22 +00:00
|
|
|
// IE6-8 fail to clone children inside object elements that use
|
|
|
|
// the proprietary classid attribute value (rather than the type
|
|
|
|
// attribute) to identify the type of content to display
|
|
|
|
if ( nodeName === "object" ) {
|
|
|
|
dest.outerHTML = src.outerHTML;
|
|
|
|
|
2011-01-10 00:38:44 +00:00
|
|
|
} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
|
|
|
|
// IE6-8 fails to persist the checked state of a cloned checkbox
|
|
|
|
// or radio button. Worse, IE6-7 fail to give the cloned element
|
|
|
|
// a checked appearance if the defaultChecked value isn't also set
|
|
|
|
if ( src.checked ) {
|
|
|
|
dest.defaultChecked = dest.checked = src.checked;
|
|
|
|
}
|
|
|
|
|
|
|
|
// IE6-7 get confused and end up setting the value of a cloned
|
|
|
|
// checkbox/radio button to an empty string instead of "on"
|
|
|
|
if ( dest.value !== src.value ) {
|
|
|
|
dest.value = src.value;
|
|
|
|
}
|
2010-12-13 01:23:22 +00:00
|
|
|
|
2010-12-13 02:01:47 +00:00
|
|
|
// IE6-8 fails to return the selected option to the default selected
|
2010-12-13 01:23:22 +00:00
|
|
|
// state when cloning options
|
2010-12-16 07:29:06 +00:00
|
|
|
} else if ( nodeName === "option" ) {
|
2010-12-13 01:23:22 +00:00
|
|
|
dest.selected = src.defaultSelected;
|
2011-01-10 00:38:44 +00:00
|
|
|
|
|
|
|
// IE6-8 fails to set the defaultValue to the correct value when
|
|
|
|
// cloning other types of input fields
|
|
|
|
} else if ( nodeName === "input" || nodeName === "textarea" ) {
|
|
|
|
dest.defaultValue = src.defaultValue;
|
2010-12-13 01:23:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Event data gets referenced instead of copied if the expando
|
|
|
|
// gets copied too
|
|
|
|
dest.removeAttribute( jQuery.expando );
|
|
|
|
}
|
|
|
|
|
2010-09-08 22:13:35 +00:00
|
|
|
jQuery.buildFragment = function( args, nodes, scripts ) {
|
2011-10-23 20:07:07 +00:00
|
|
|
var fragment, cacheable, cacheresults, doc,
|
|
|
|
first = args[ 0 ];
|
2011-04-30 14:42:36 +00:00
|
|
|
|
2011-10-24 13:27:16 +00:00
|
|
|
// nodes may contain either an explicit document object,
|
|
|
|
// a jQuery collection or context object.
|
|
|
|
// If nodes[0] contains a valid object to assign to doc
|
|
|
|
if ( nodes && nodes[0] ) {
|
|
|
|
doc = nodes[0].ownerDocument || nodes[0];
|
|
|
|
}
|
2011-04-30 14:42:36 +00:00
|
|
|
|
2011-11-08 02:22:04 +00:00
|
|
|
// Ensure that an attr object doesn't incorrectly stand in as a document object
|
2011-04-30 14:42:36 +00:00
|
|
|
// Chrome and Firefox seem to allow this to occur and will throw exception
|
|
|
|
// Fixes #8950
|
|
|
|
if ( !doc.createDocumentFragment ) {
|
|
|
|
doc = document;
|
|
|
|
}
|
2010-01-29 05:22:20 +00:00
|
|
|
|
2010-12-27 19:43:52 +00:00
|
|
|
// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
|
2010-01-29 05:22:20 +00:00
|
|
|
// Cloning options loses the selected state, so don't cache them
|
2010-02-01 23:52:12 +00:00
|
|
|
// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
|
2010-01-29 05:22:20 +00:00
|
|
|
// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
|
2011-10-23 20:07:07 +00:00
|
|
|
// Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
|
|
|
|
if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
|
|
|
|
first.charAt(0) === "<" && !rnocache.test( first ) &&
|
|
|
|
(jQuery.support.checkClone || !rchecked.test( first )) &&
|
2011-11-08 05:05:33 +00:00
|
|
|
(jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
|
2009-09-07 18:58:01 +00:00
|
|
|
|
|
|
|
cacheable = true;
|
2011-04-22 01:51:23 +00:00
|
|
|
|
2011-10-23 20:07:07 +00:00
|
|
|
cacheresults = jQuery.fragments[ first ];
|
2011-04-22 01:51:23 +00:00
|
|
|
if ( cacheresults && cacheresults !== 1 ) {
|
|
|
|
fragment = cacheresults;
|
2009-09-07 18:58:01 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( !fragment ) {
|
|
|
|
fragment = doc.createDocumentFragment();
|
|
|
|
jQuery.clean( args, doc, fragment, scripts );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( cacheable ) {
|
2011-10-23 20:07:07 +00:00
|
|
|
jQuery.fragments[ first ] = cacheresults ? fragment : 1;
|
2009-09-07 18:58:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return { fragment: fragment, cacheable: cacheable };
|
2010-09-08 22:13:35 +00:00
|
|
|
};
|
2009-09-07 18:58:01 +00:00
|
|
|
|
2009-07-11 13:49:46 +00:00
|
|
|
jQuery.fragments = {};
|
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
jQuery.each({
|
|
|
|
appendTo: "append",
|
|
|
|
prependTo: "prepend",
|
|
|
|
insertBefore: "before",
|
|
|
|
insertAfter: "after",
|
|
|
|
replaceAll: "replaceWith"
|
2009-12-22 00:58:13 +00:00
|
|
|
}, function( name, original ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
jQuery.fn[ name ] = function( selector ) {
|
2010-11-09 16:09:07 +00:00
|
|
|
var ret = [],
|
|
|
|
insert = jQuery( selector ),
|
2010-02-13 07:49:04 +00:00
|
|
|
parent = this.length === 1 && this[0].parentNode;
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-02-13 07:49:04 +00:00
|
|
|
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
|
2010-01-28 21:30:37 +00:00
|
|
|
insert[ original ]( this[0] );
|
|
|
|
return this;
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 21:30:37 +00:00
|
|
|
} else {
|
|
|
|
for ( var i = 0, l = insert.length; i < l; i++ ) {
|
2011-10-27 19:32:49 +00:00
|
|
|
var elems = ( i > 0 ? this.clone(true) : this ).get();
|
2010-03-05 14:59:58 +00:00
|
|
|
jQuery( insert[i] )[ original ]( elems );
|
2010-01-28 21:30:37 +00:00
|
|
|
ret = ret.concat( elems );
|
|
|
|
}
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 21:30:37 +00:00
|
|
|
return this.pushStack( ret, name, insert.selector );
|
2009-03-18 21:15:38 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
2011-02-23 18:18:44 +00:00
|
|
|
function getAll( elem ) {
|
2011-10-12 04:06:30 +00:00
|
|
|
if ( typeof elem.getElementsByTagName !== "undefined" ) {
|
2011-02-23 18:18:44 +00:00
|
|
|
return elem.getElementsByTagName( "*" );
|
2011-05-11 12:12:19 +00:00
|
|
|
|
2011-10-12 04:06:30 +00:00
|
|
|
} else if ( typeof elem.querySelectorAll !== "undefined" ) {
|
2011-02-23 18:18:44 +00:00
|
|
|
return elem.querySelectorAll( "*" );
|
|
|
|
|
|
|
|
} else {
|
|
|
|
return [];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// Used in clean, fixes the defaultChecked property
|
|
|
|
function fixDefaultChecked( elem ) {
|
|
|
|
if ( elem.type === "checkbox" || elem.type === "radio" ) {
|
|
|
|
elem.defaultChecked = elem.checked;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Finds all inputs and passes them to fixDefaultChecked
|
|
|
|
function findInputs( elem ) {
|
2011-10-27 19:32:49 +00:00
|
|
|
var nodeName = ( elem.nodeName || "" ).toLowerCase();
|
2011-10-12 04:06:30 +00:00
|
|
|
if ( nodeName === "input" ) {
|
2011-04-22 01:51:23 +00:00
|
|
|
fixDefaultChecked( elem );
|
2011-10-12 04:06:30 +00:00
|
|
|
// Skip scripts, get other children
|
|
|
|
} else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
|
2011-04-22 01:51:23 +00:00
|
|
|
jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-11-08 02:22:04 +00:00
|
|
|
// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
|
|
|
|
function shimCloneNode( elem ) {
|
|
|
|
var div = document.createElement( "div" );
|
|
|
|
safeFragment.appendChild( div );
|
|
|
|
|
|
|
|
div.innerHTML = elem.outerHTML;
|
|
|
|
return div.firstChild;
|
|
|
|
}
|
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
jQuery.extend({
|
2011-01-20 20:25:04 +00:00
|
|
|
clone: function( elem, dataAndEvents, deepDataAndEvents ) {
|
2011-11-08 02:22:04 +00:00
|
|
|
var srcElements,
|
|
|
|
destElements,
|
|
|
|
i,
|
2011-11-08 14:48:44 +00:00
|
|
|
// IE<=8 does not properly clone detached, unknown element nodes
|
|
|
|
clone = jQuery.support.html5Clone || !rnoshimcache.test( "<" + elem.nodeName ) ?
|
|
|
|
elem.cloneNode( true ) :
|
|
|
|
shimCloneNode( elem );
|
2011-01-20 19:25:56 +00:00
|
|
|
|
2011-02-23 18:18:44 +00:00
|
|
|
if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
|
|
|
|
(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
|
2011-01-20 19:25:56 +00:00
|
|
|
// IE copies events bound via attachEvent when using cloneNode.
|
|
|
|
// Calling detachEvent on the clone will also remove the events
|
|
|
|
// from the original. In order to get around this, we use some
|
|
|
|
// proprietary methods to clear the events. Thanks to MooTools
|
|
|
|
// guys for this hotness.
|
|
|
|
|
2011-02-01 22:54:02 +00:00
|
|
|
cloneFixAttributes( elem, clone );
|
|
|
|
|
2011-11-08 02:22:04 +00:00
|
|
|
// Using Sizzle here is crazy slow, so we use getElementsByTagName instead
|
2011-02-23 18:18:44 +00:00
|
|
|
srcElements = getAll( elem );
|
|
|
|
destElements = getAll( clone );
|
2011-01-20 19:25:56 +00:00
|
|
|
|
|
|
|
// Weird iteration because IE will replace the length property
|
|
|
|
// with an element if you are cloning the body and one of the
|
|
|
|
// elements on the page has a name or id of "length"
|
2011-01-21 23:41:42 +00:00
|
|
|
for ( i = 0; srcElements[i]; ++i ) {
|
2011-06-15 15:14:52 +00:00
|
|
|
// Ensure that the destination node is not null; Fixes #9587
|
|
|
|
if ( destElements[i] ) {
|
|
|
|
cloneFixAttributes( srcElements[i], destElements[i] );
|
|
|
|
}
|
2011-01-20 19:25:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Copy the events from the original to the clone
|
2011-01-20 20:25:04 +00:00
|
|
|
if ( dataAndEvents ) {
|
|
|
|
cloneCopyEvent( elem, clone );
|
2011-01-20 19:25:56 +00:00
|
|
|
|
2011-02-23 18:18:44 +00:00
|
|
|
if ( deepDataAndEvents ) {
|
|
|
|
srcElements = getAll( elem );
|
|
|
|
destElements = getAll( clone );
|
2011-01-20 19:25:56 +00:00
|
|
|
|
2011-02-23 18:18:44 +00:00
|
|
|
for ( i = 0; srcElements[i]; ++i ) {
|
|
|
|
cloneCopyEvent( srcElements[i], destElements[i] );
|
2011-01-20 19:25:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2011-02-23 18:18:44 +00:00
|
|
|
|
2011-05-25 19:18:13 +00:00
|
|
|
srcElements = destElements = null;
|
|
|
|
|
2011-01-20 19:25:56 +00:00
|
|
|
// Return the cloned set
|
|
|
|
return clone;
|
2011-04-02 01:13:01 +00:00
|
|
|
},
|
|
|
|
|
2009-09-07 18:58:01 +00:00
|
|
|
clean: function( elems, context, fragment, scripts ) {
|
2011-04-12 22:30:21 +00:00
|
|
|
var checkScriptType;
|
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
context = context || document;
|
|
|
|
|
|
|
|
// !context.createElement fails in IE with an error but returns typeof 'object'
|
2009-07-19 15:29:03 +00:00
|
|
|
if ( typeof context.createElement === "undefined" ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-05-03 19:02:26 +00:00
|
|
|
var ret = [], j;
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2010-01-28 21:30:37 +00:00
|
|
|
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
2009-07-19 15:29:03 +00:00
|
|
|
if ( typeof elem === "number" ) {
|
2009-12-22 01:13:16 +00:00
|
|
|
elem += "";
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2009-12-22 00:58:13 +00:00
|
|
|
if ( !elem ) {
|
2010-01-28 21:30:37 +00:00
|
|
|
continue;
|
2009-12-22 00:58:13 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
|
|
|
// Convert html string into DOM nodes
|
2011-04-22 01:51:23 +00:00
|
|
|
if ( typeof elem === "string" ) {
|
|
|
|
if ( !rhtml.test( elem ) ) {
|
|
|
|
elem = context.createTextNode( elem );
|
|
|
|
} else {
|
|
|
|
// Fix "XHTML"-style tags in all browsers
|
|
|
|
elem = elem.replace(rxhtmlTag, "<$1></$2>");
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// Trim whitespace, otherwise indexOf won't work as expected
|
2011-10-27 19:32:49 +00:00
|
|
|
var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
|
2011-04-22 01:51:23 +00:00
|
|
|
wrap = wrapMap[ tag ] || wrapMap._default,
|
|
|
|
depth = wrap[0],
|
|
|
|
div = context.createElement("div");
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-09-19 20:42:36 +00:00
|
|
|
// Append wrapper element to unknown element safe doc fragment
|
2011-09-28 14:06:29 +00:00
|
|
|
if ( context === document ) {
|
|
|
|
// Use the fragment we've already created for this document
|
|
|
|
safeFragment.appendChild( div );
|
|
|
|
} else {
|
|
|
|
// Use a fragment created with the owner document
|
|
|
|
createSafeFragment( context ).appendChild( div );
|
|
|
|
}
|
2011-09-19 20:42:36 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// Go to html and back, then peel off extra wrappers
|
|
|
|
div.innerHTML = wrap[1] + elem + wrap[2];
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// Move to the right depth
|
|
|
|
while ( depth-- ) {
|
|
|
|
div = div.lastChild;
|
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// Remove IE's autoinserted <tbody> from table fragments
|
|
|
|
if ( !jQuery.support.tbody ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// String was a <table>, *may* have spurious <tbody>
|
|
|
|
var hasBody = rtbody.test(elem),
|
|
|
|
tbody = tag === "table" && !hasBody ?
|
|
|
|
div.firstChild && div.firstChild.childNodes :
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// String was a bare <thead> or <tfoot>
|
|
|
|
wrap[1] === "<table>" && !hasBody ?
|
|
|
|
div.childNodes :
|
|
|
|
[];
|
2009-03-18 21:15:38 +00:00
|
|
|
|
2011-05-03 19:02:26 +00:00
|
|
|
for ( j = tbody.length - 1; j >= 0 ; --j ) {
|
2011-04-22 01:51:23 +00:00
|
|
|
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
|
|
|
|
tbody[ j ].parentNode.removeChild( tbody[ j ] );
|
|
|
|
}
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
}
|
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// IE completely kills leading whitespace when innerHTML is used
|
|
|
|
if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
|
|
|
|
div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
|
|
|
|
}
|
2009-07-19 15:29:03 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
elem = div.childNodes;
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2011-04-22 01:51:23 +00:00
|
|
|
}
|
2009-03-23 01:55:17 +00:00
|
|
|
|
2011-04-22 01:51:23 +00:00
|
|
|
// Resets defaultChecked for any radios and checkboxes
|
|
|
|
// about to be appended to the DOM in IE 6/7 (#8060)
|
|
|
|
var len;
|
|
|
|
if ( !jQuery.support.appendChecked ) {
|
|
|
|
if ( elem[0] && typeof (len = elem.length) === "number" ) {
|
2011-05-03 19:02:26 +00:00
|
|
|
for ( j = 0; j < len; j++ ) {
|
|
|
|
findInputs( elem[j] );
|
2011-04-22 01:51:23 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
findInputs( elem );
|
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
}
|
|
|
|
|
2009-07-19 15:29:03 +00:00
|
|
|
if ( elem.nodeType ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
ret.push( elem );
|
2009-07-19 15:29:03 +00:00
|
|
|
} else {
|
2009-03-18 21:15:38 +00:00
|
|
|
ret = jQuery.merge( ret, elem );
|
2009-07-19 15:29:03 +00:00
|
|
|
}
|
2010-01-28 21:30:37 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
|
|
|
|
if ( fragment ) {
|
2011-04-12 22:30:21 +00:00
|
|
|
checkScriptType = function( elem ) {
|
|
|
|
return !elem.type || rscriptType.test( elem.type );
|
|
|
|
};
|
2010-03-02 02:24:49 +00:00
|
|
|
for ( i = 0; ret[i]; i++ ) {
|
2009-09-07 18:58:01 +00:00
|
|
|
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
|
2009-03-18 21:15:38 +00:00
|
|
|
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2009-03-18 21:15:38 +00:00
|
|
|
} else {
|
2009-07-19 15:48:30 +00:00
|
|
|
if ( ret[i].nodeType === 1 ) {
|
2011-04-12 22:30:21 +00:00
|
|
|
var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
|
2011-04-12 20:39:30 +00:00
|
|
|
|
|
|
|
ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
|
2009-07-19 15:48:30 +00:00
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
fragment.appendChild( ret[i] );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
2010-01-24 02:20:19 +00:00
|
|
|
},
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-24 02:20:19 +00:00
|
|
|
cleanData: function( elems ) {
|
2011-10-23 20:07:07 +00:00
|
|
|
var data, id,
|
2011-09-19 20:13:14 +00:00
|
|
|
cache = jQuery.cache,
|
|
|
|
special = jQuery.event.special,
|
2010-02-13 11:32:20 +00:00
|
|
|
deleteExpando = jQuery.support.deleteExpando;
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 20:25:52 +00:00
|
|
|
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
2010-03-02 18:56:15 +00:00
|
|
|
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2010-01-28 20:25:52 +00:00
|
|
|
id = elem[ jQuery.expando ];
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 20:25:52 +00:00
|
|
|
if ( id ) {
|
2011-09-19 20:13:14 +00:00
|
|
|
data = cache[ id ];
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-03-09 17:22:25 +00:00
|
|
|
if ( data && data.events ) {
|
2010-02-13 11:10:43 +00:00
|
|
|
for ( var type in data.events ) {
|
|
|
|
if ( special[ type ] ) {
|
|
|
|
jQuery.event.remove( elem, type );
|
|
|
|
|
2011-01-09 21:52:33 +00:00
|
|
|
// This is a shortcut to avoid jQuery.event.remove's overhead
|
2010-02-13 11:10:43 +00:00
|
|
|
} else {
|
2010-09-08 22:13:35 +00:00
|
|
|
jQuery.removeEvent( elem, type, data.handle );
|
2010-02-13 11:10:43 +00:00
|
|
|
}
|
2010-01-28 20:25:52 +00:00
|
|
|
}
|
2011-01-09 22:25:44 +00:00
|
|
|
|
|
|
|
// Null the DOM reference to avoid IE6/7/8 leak (#7054)
|
|
|
|
if ( data.handle ) {
|
|
|
|
data.handle.elem = null;
|
|
|
|
}
|
2010-01-28 20:25:52 +00:00
|
|
|
}
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-02-13 11:32:20 +00:00
|
|
|
if ( deleteExpando ) {
|
2010-02-13 11:57:58 +00:00
|
|
|
delete elem[ jQuery.expando ];
|
|
|
|
|
|
|
|
} else if ( elem.removeAttribute ) {
|
|
|
|
elem.removeAttribute( jQuery.expando );
|
2010-02-13 11:32:20 +00:00
|
|
|
}
|
2010-12-07 01:36:42 +00:00
|
|
|
|
2010-01-28 20:25:52 +00:00
|
|
|
delete cache[ id ];
|
|
|
|
}
|
2009-03-18 21:15:38 +00:00
|
|
|
}
|
|
|
|
}
|
2010-01-25 02:37:05 +00:00
|
|
|
});
|
2010-03-23 16:12:16 +00:00
|
|
|
|
2011-06-15 15:14:52 +00:00
|
|
|
})( jQuery );
|