diff --git a/src/data.js b/src/data.js index 20c134a6d..0e243ca61 100644 --- a/src/data.js +++ b/src/data.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 ); - } - }; -} \ No newline at end of file diff --git a/src/manipulation.js b/src/manipulation.js index 4e7a31ed4..4eb19eaf0 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -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 ]; } diff --git a/src/support.js b/src/support.js index c9ff58c36..c9bfdf0b9 100644 --- a/src/support.js +++ b/src/support.js @@ -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; });