Found a better detect for deleting an expando, added back in removeAttribute as it...
[jquery.git] / src / manipulation.js
index a58e52b..196f230 100644 (file)
@@ -547,7 +547,9 @@ jQuery.extend({
        },
        
        cleanData: function( elems ) {
-               var data, id, cache = jQuery.cache;
+               var data, id, cache = jQuery.cache,
+                       special = jQuery.event.special,
+                       deleteExpando = jQuery.support.deleteExpando;
                
                for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
                        id = elem[ jQuery.expando ];
@@ -556,12 +558,22 @@ jQuery.extend({
                                data = cache[ id ];
                                
                                if ( data.events ) {
-                                       for ( var event in data.events ) {
-                                               removeEvent( elem, event, data.handle );
+                                       for ( var type in data.events ) {
+                                               if ( special[ type ] ) {
+                                                       jQuery.event.remove( elem, type );
+
+                                               } else {
+                                                       removeEvent( elem, type, data.handle );
+                                               }
                                        }
                                }
                                
-                               removeExpando( elem );
+                               if ( deleteExpando ) {
+                                       delete elem[ jQuery.expando ];
+
+                               } else if ( elem.removeAttribute ) {
+                                       elem.removeAttribute( jQuery.expando );
+                               }
                                
                                delete cache[ id ];
                        }