From 0e3e470edc77cde0eede8aa6b7642c336d081d66 Mon Sep 17 00:00:00 2001 From: Ariel Flesler Date: Thu, 25 Dec 2008 19:47:56 +0000 Subject: [PATCH] jquery core: Closes #3255. The div used in jQuery.clean is emptied in the end. Cleaning the parentNode's properties of the elements. --- src/core.js | 8 ++++++-- test/unit/core.js | 14 +++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/core.js b/src/core.js index b35abade3..0e02436fc 100644 --- a/src/core.js +++ b/src/core.js @@ -909,13 +909,14 @@ jQuery.extend({ }, clean: function( elems, context, fragment ) { - var ret = [], scripts = []; context = context || document; // !context.createElement fails in IE with an error but returns typeof 'object' if ( typeof context.createElement === "undefined" ) context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + var ret = [], scripts = [], div = context.createElement("div"); + jQuery.each(elems, function(i, elem){ if ( typeof elem === "number" ) elem += ''; @@ -933,7 +934,7 @@ jQuery.extend({ }); // Trim whitespace, otherwise indexOf won't work as expected - var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); + var tags = jQuery.trim( elem ).toLowerCase(); var wrap = // option or optgroup @@ -1009,6 +1010,9 @@ jQuery.extend({ ret = jQuery.merge( ret, elem ); }); + + // Clean up + div.innerHTML = ""; if ( fragment ) { for ( var i = 0; ret[i]; i++ ) { diff --git a/test/unit/core.js b/test/unit/core.js index 679d50425..4da992de0 100644 --- a/test/unit/core.js +++ b/test/unit/core.js @@ -451,7 +451,7 @@ test("attr(Hash)", function() { }); test("attr(String, Object)", function() { - expect(17); + expect(19); var div = jQuery("div").attr("foo", "bar"); fail = false; for ( var i = 0; i < div.size(); i++ ) { @@ -515,6 +515,16 @@ test("attr(String, Object)", function() { } ok( thrown, "Exception thrown when trying to change type property" ); equals( "checkbox", jQuery(check).attr('type'), "Verify that you can change the type of an input element that isn't in the DOM" ); + + var check = jQuery(""); + var thrown = true; + try { + check.attr('type','checkbox'); + } catch(e) { + thrown = false; + } + ok( thrown, "Exception thrown when trying to change type property" ); + equals( "checkbox", check.attr('type'), "Verify that you can change the type of an input element that isn't in the DOM" ); }); if ( !isLocal ) { @@ -1139,6 +1149,8 @@ test("is(String)", function() { }); test("jQuery.merge()", function() { + expect(6); + var parse = jQuery.merge; same( parse([],[]), [], "Empty arrays" );