Clean up expando removal code - only try to delete the expando from an element if...
authorjeresig <jeresig@gmail.com>
Sat, 13 Feb 2010 11:32:20 +0000 (06:32 -0500)
committerjeresig <jeresig@gmail.com>
Sat, 13 Feb 2010 11:32:20 +0000 (06:32 -0500)
src/data.js
src/manipulation.js
src/support.js

index 20c134a..0e243ca 100644 (file)
@@ -79,15 +79,8 @@ jQuery.extend({
 
                // Otherwise, we want to remove all of the element's data
                } else {
-                       // Clean up the element expando
-                       try {
+                       if ( jQuery.support.deleteExpando ) {
                                delete elem[ expando ];
-                       } catch( e ) {
-                               // IE has trouble directly removing the expando
-                               // but it's ok with using removeAttribute
-                               if ( elem.removeAttribute ) {
-                                       elem.removeAttribute( expando );
-                               }
                        }
 
                        // Completely remove the data cache
@@ -132,22 +125,3 @@ jQuery.fn.extend({
                });
        }
 });
-
-var removeExpando = function( elem ) {
-       delete elem[ expando ];
-};
-
-try {
-       var div = document.createElement("div");
-       div[ expando ] = true;
-       delete div[ expando ];
-       
-} catch( e ) {
-       // IE has trouble directly removing the expando
-       // but it's ok with using removeAttribute
-       removeExpando = function( elem ) {
-               if ( elem.removeAttribute ) {
-                       elem.removeAttribute( expando );
-               }
-       };
-}
\ No newline at end of file
index 4e7a31e..4eb19ea 100644 (file)
@@ -547,7 +547,9 @@ jQuery.extend({
        },
        
        cleanData: function( elems ) {
-               var data, id, cache = jQuery.cache, special = jQuery.event.special;
+               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 ];
@@ -566,7 +568,9 @@ jQuery.extend({
                                        }
                                }
                                
-                               removeExpando( elem );
+                               if ( deleteExpando ) {
+                                       delete elem[ expando ];
+                               }
                                
                                delete cache[ id ];
                        }
index c9ff58c..c9bfdf0 100644 (file)
@@ -59,6 +59,7 @@
                parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
 
                // Will be defined later
+               deleteExpando: true,
                checkClone: false,
                scriptEval: false,
                noCloneEvent: true,
                document.body.appendChild( div );
                jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
                document.body.removeChild( div ).style.display = 'none';
+
+               // Test to see if it's possible to delete an expando from an element
+               // Fails in Internet Explorer
+               try {
+                       div.test = 1;
+                       delete doc.test;
+       
+               } catch(e) {
+                       jQuery.support.deleteExpando = false;
+               }
+
                div = null;
        });