Skip to content
Permalink
Browse files

Clean up expando removal code - only try to delete the expando from a…

…n element if it's possible.
  • Loading branch information
jeresig committed Feb 13, 2010
1 parent da96657 commit 9195107dbb13ad34ae4e9f7cb1df5d79e4748560
Showing with 19 additions and 29 deletions.
  1. +1 −27 src/data.js
  2. +6 −2 src/manipulation.js
  3. +12 −0 src/support.js
@@ -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 );
}
};
}
@@ -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 ];
}
@@ -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,
@@ -110,6 +111,17 @@
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;
});

0 comments on commit 9195107

Please sign in to comment.
You can’t perform that action at this time.