From 9b9a7932735d43a936c74084a613f21b250de6f9 Mon Sep 17 00:00:00 2001
From: Brandon Aaron <brandon.aaron@gmail.com>
Date: Sat, 21 Jul 2007 03:16:22 +0000
Subject: [PATCH] selectedIndex is now cloned in IE (#1294)

---
 src/jquery/jquery.js |   40 +++++++++++++++++++++++++---------------
 1 file changed, 25 insertions(+), 15 deletions(-)

diff --git a/src/jquery/jquery.js b/src/jquery/jquery.js
index d6d3d6a..b4202c8 100644
--- a/src/jquery/jquery.js
+++ b/src/jquery/jquery.js
@@ -852,27 +852,37 @@ jQuery.fn = jQuery.prototype = {
 	 * @cat DOM/Manipulation
 	 */
 	clone: function(deep) {
-		// Need to remove events on the element and its descendants
-		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
+			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();
+		}
 
 		// Do the clone
 		var r = this.pushStack( jQuery.map( this, function(a){
 			return a.cloneNode( deep != undefined ? deep : true );
 		}) );
 
-		// 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) {
+			// 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;
+			});
+			
+			// set selected values of select elements
+			var selects = r.find('select');
+			$this.filter('select').each(function(i) {
+				selects[i].selectedIndex = this.selectedIndex;
+			});
+		}
 
 		// Return the cloned set
 		return r;
-- 
1.7.10.4