mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Fix #8335: Avoid memory leak by never setting data on non-element non-document nodes. Ref gh-1127.
(cherry picked from commit cc324abf73
)
This commit is contained in:
parent
6b1b0a26b4
commit
8f72967ee2
@ -223,6 +223,11 @@ jQuery.extend({
|
|||||||
|
|
||||||
// A method for determining if a DOM node can handle the data expando
|
// A method for determining if a DOM node can handle the data expando
|
||||||
acceptData: function( elem ) {
|
acceptData: function( elem ) {
|
||||||
|
// Do not set data on non-element because it will not be cleared (#8335).
|
||||||
|
if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
|
var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
|
||||||
|
|
||||||
// nodes accept data unless otherwise specified; rejection can be conditional
|
// nodes accept data unless otherwise specified; rejection can be conditional
|
||||||
|
@ -133,8 +133,16 @@ test("Expando cleanup", 4, function() {
|
|||||||
jQuery(div).remove();
|
jQuery(div).remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("Data is not being set on comment and text nodes", function() {
|
||||||
|
expect(2);
|
||||||
|
|
||||||
|
ok( !jQuery.hasData( jQuery("<!-- comment -->").data("foo", 0) ) );
|
||||||
|
ok( !jQuery.hasData( jQuery("<span>text</span>").contents().data("foo", 0) ) );
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
test("jQuery.acceptData", function() {
|
test("jQuery.acceptData", function() {
|
||||||
expect(7);
|
expect(9);
|
||||||
|
|
||||||
ok( jQuery.acceptData( document ), "document" );
|
ok( jQuery.acceptData( document ), "document" );
|
||||||
ok( jQuery.acceptData( document.documentElement ), "documentElement" );
|
ok( jQuery.acceptData( document.documentElement ), "documentElement" );
|
||||||
@ -149,6 +157,9 @@ test("jQuery.acceptData", function() {
|
|||||||
var applet = document.createElement("object");
|
var applet = document.createElement("object");
|
||||||
applet.setAttribute("classid", "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93");
|
applet.setAttribute("classid", "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93");
|
||||||
ok( !jQuery.acceptData( applet ), "applet" );
|
ok( !jQuery.acceptData( applet ), "applet" );
|
||||||
|
|
||||||
|
ok( !jQuery.acceptData( document.createComment("") ), "comment" );
|
||||||
|
ok( !jQuery.acceptData( document.createTextNode("") ), "text" );
|
||||||
});
|
});
|
||||||
|
|
||||||
test(".data()", function() {
|
test(".data()", function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user