mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Clean up expando removal code - only try to delete the expando from an element if it's possible.
This commit is contained in:
parent
da966573c3
commit
9195107dbb
28
src/data.js
28
src/data.js
@ -79,15 +79,8 @@ jQuery.extend({
|
|||||||
|
|
||||||
// Otherwise, we want to remove all of the element's data
|
// Otherwise, we want to remove all of the element's data
|
||||||
} else {
|
} else {
|
||||||
// Clean up the element expando
|
if ( jQuery.support.deleteExpando ) {
|
||||||
try {
|
|
||||||
delete elem[ expando ];
|
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
|
// 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 ) {
|
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++ ) {
|
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
|
||||||
id = elem[ jQuery.expando ];
|
id = elem[ jQuery.expando ];
|
||||||
@ -566,7 +568,9 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
removeExpando( elem );
|
if ( deleteExpando ) {
|
||||||
|
delete elem[ expando ];
|
||||||
|
}
|
||||||
|
|
||||||
delete cache[ id ];
|
delete cache[ id ];
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
|
parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
|
||||||
|
|
||||||
// Will be defined later
|
// Will be defined later
|
||||||
|
deleteExpando: true,
|
||||||
checkClone: false,
|
checkClone: false,
|
||||||
scriptEval: false,
|
scriptEval: false,
|
||||||
noCloneEvent: true,
|
noCloneEvent: true,
|
||||||
@ -110,6 +111,17 @@
|
|||||||
document.body.appendChild( div );
|
document.body.appendChild( div );
|
||||||
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
|
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
|
||||||
document.body.removeChild( div ).style.display = 'none';
|
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;
|
div = null;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user