jquery core: Closes #3255. The div used in jQuery.clean is emptied in the end. Cleani...
authorAriel Flesler <aflesler@gmail.com>
Thu, 25 Dec 2008 19:47:56 +0000 (19:47 +0000)
committerAriel Flesler <aflesler@gmail.com>
Thu, 25 Dec 2008 19:47:56 +0000 (19:47 +0000)
src/core.js
test/unit/core.js

index b35abad..0e02436 100644 (file)
@@ -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++ ) {
index 679d504..4da992d 100644 (file)
@@ -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("<input />");
+       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" );