* @cat DOM/Manipulation
*/
clone: function(deep) {
- // Need to remove events on the element and its descendants
+ deep = deep != undefined ? deep : true
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();
+ if (jQuery.browser.msie) {
+ // Need to remove events on the element and its descendants
+ $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 );
+ return a.cloneNode( deep );
}) );
- // 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;
- });
+ if (jQuery.browser.msie) {
+ $this.each(function() {
+ // Add the events back to the original and its descendants
+ 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;
+ });
+ }
+
+ // copy form values over
+ if (deep) {
+ var inputs = r.add(r.find('*')).filter('select,input[@type=checkbox]');
+ $this.filter('select,input[@type=checkbox]').each(function(i) {
+ if (this.selectedIndex)
+ inputs[i].selectedIndex = this.selectedIndex;
+ if (this.checked)
+ inputs[i].checked = true;
+ });
+ }
// Return the cloned set
return r;
// check if an element is in a XML document
isXMLDoc: function(elem) {
- return elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
+ return elem.documentElement && !elem.body ||
+ elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
},
nodeName: function( elem, name ) {
className: {
// internal only, use addClass("class")
add: function( elem, c ){
- jQuery.each( c.split(/\s+/), function(i, cur){
+ jQuery.each( (c || "").split(/\s+/), function(i, cur){
if ( !jQuery.className.has( elem.className, cur ) )
elem.className += ( elem.className ? " " : "" ) + cur;
});