]> source.dussan.org Git - jquery.git/commitdiff
Resurrect buildFragment and sacrifice jQuery.clean. See gh-1117.
authorDave Methvin <dave.methvin@gmail.com>
Tue, 8 Jan 2013 03:25:26 +0000 (03:25 +0000)
committerDave Methvin <dave.methvin@gmail.com>
Tue, 8 Jan 2013 03:27:10 +0000 (03:27 +0000)
src/core.js
src/manipulation.js
test/unit/core.js
test/unit/manipulation.js

index 656fc22f149c0a50bfe03d2160944565e5f3e71d..86516775781b869c506eaeb0a2e7834c9765dab7 100644 (file)
@@ -496,8 +496,7 @@ jQuery.extend({
                        return [ context.createElement( parsed[1] ) ];
                }
 
-               parsed = context.createDocumentFragment();
-               jQuery.clean( [ data ], context, parsed, scripts );
+               parsed = jQuery.buildFragment( [ data ], context, scripts );
                if ( scripts ) {
                        jQuery( scripts ).remove();
                }
index 3393dd0a566a70401b0b95f6e52a36ec3fdac4b4..416e4c3d6430aa9df247d9a130251569a111273d 100644 (file)
@@ -310,8 +310,7 @@ jQuery.fn.extend({
 
                if ( this[0] ) {
                        doc = this[0].ownerDocument;
-                       fragment = doc.createDocumentFragment();
-                       jQuery.clean( args, doc, fragment, undefined, this );
+                       fragment = jQuery.buildFragment( args, doc, false, this );
                        first = fragment.firstChild;
 
                        if ( fragment.childNodes.length === 1 ) {
@@ -556,7 +555,7 @@ function getAll( context, tag ) {
                found;
 }
 
-// Used in clean, fixes the defaultChecked property
+// Used in buildFragment, fixes the defaultChecked property
 function fixDefaultChecked( elem ) {
        if ( manipulation_rcheckableType.test( elem.type ) ) {
                elem.defaultChecked = elem.checked;
@@ -619,9 +618,10 @@ jQuery.extend({
                return clone;
        },
 
-       clean: function( elems, context, fragment, scripts, selection ) {
+       buildFragment: function( elems, context, scripts, selection ) {
                var elem, i, j, tmp, tag, wrap, tbody,
                        ret = [],
+                       fragment = context.createDocumentFragment(),
                        safe = context === document && safeFragment;
 
                // Ensure that context is a document
@@ -708,29 +708,27 @@ jQuery.extend({
                        jQuery.grep( getAll( ret, "input" ), fixDefaultChecked );
                }
 
-               if ( fragment ) {
-                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
-                               safe = jQuery.contains( elem.ownerDocument, elem );
+               for ( i = 0; (elem = ret[i]) != null; i++ ) {
+                       safe = jQuery.contains( elem.ownerDocument, elem );
 
-                               // Append to fragment
-                               // #4087 - If origin and destination elements are the same, and this is
-                               // that element, do not append to fragment
-                               if ( !selection || jQuery.inArray( elem, selection ) === -1 ) {
-                                       fragment.appendChild( elem );
-                               }
-                               tmp = getAll( elem, "script" );
+                       // Append to fragment
+                       // #4087 - If origin and destination elements are the same, and this is
+                       // that element, do not append to fragment
+                       if ( !selection || jQuery.inArray( elem, selection ) === -1 ) {
+                               fragment.appendChild( elem );
+                       }
+                       tmp = getAll( elem, "script" );
 
-                               // Preserve script evaluation history
-                               if ( safe ) {
-                                       setGlobalEval( tmp );
-                               }
+                       // Preserve script evaluation history
+                       if ( safe ) {
+                               setGlobalEval( tmp );
+                       }
 
-                               // Capture executables
-                               if ( scripts ) {
-                                       for ( j = 0; (elem = tmp[j]) != null; j++ ) {
-                                               if ( rscriptType.test( elem.type || "" ) ) {
-                                                       scripts.push( elem );
-                                               }
+                       // Capture executables
+                       if ( scripts ) {
+                               for ( j = 0; (elem = tmp[j]) != null; j++ ) {
+                                       if ( rscriptType.test( elem.type || "" ) ) {
+                                               scripts.push( elem );
                                        }
                                }
                        }
@@ -738,7 +736,7 @@ jQuery.extend({
 
                elem = tmp = safe = null;
 
-               return ret;
+               return fragment;
        },
 
        cleanData: function( elems, /* internal */ acceptData ) {
index db21c41ccb3fad6fd97ce7c09f799d9c0b084e02..f7612896fa7eca834cf750e8d449c526e265a540 100644 (file)
@@ -1210,7 +1210,7 @@ test("jQuery.proxy", function(){
 });
 
 test("jQuery.parseHTML", function() {
-       expect( 13 );
+       expect( 17 );
 
        var html, nodes;
 
@@ -1237,6 +1237,13 @@ test("jQuery.parseHTML", function() {
        equal( jQuery.parseHTML( "\t<div></div>" )[0].nodeValue, "\t", "Preserve leading whitespace" );
 
        equal( jQuery.parseHTML(" <div/> ")[0].nodeType, 3, "Leading spaces are treated as text nodes (#11290)" );
+
+       html = jQuery.parseHTML( "<div>test div</div>" );
+       equal( html[ 0 ].parentNode.nodeType, 11, "parentNode should be documentFragment" );
+       equal( html[ 0 ].innerHTML, "test div", "Content should be preserved" );
+
+       equal( jQuery.parseHTML("<span><span>").length, 1, "Incorrect html-strings should not break anything" );
+       equal( jQuery.parseHTML("<td><td>")[ 1 ].parentNode.nodeType, 11, "parentNode should be documentFragment" );
 });
 
 test("jQuery.parseJSON", function(){
index d208b3b7a9f4fa8c042bf2e7a6fbdcdfe76265fa..0a110725e42a000806e3bd10afe55937f70d6ad4 100644 (file)
@@ -672,24 +672,6 @@ test( "append HTML5 sectioning elements (Bug #6485)", function() {
        equal( aside.length, 1, "HTML5 elements do not collapse their children" );
 });
 
-test( "jQuery.clean, #12392", function() {
-
-       expect( 6 );
-
-       var elems = jQuery.clean( [ "<div>test div</div>", "<p>test p</p>" ] );
-
-       ok( elems[ 0 ].parentNode == null || elems[ 0 ].parentNode.nodeType === 11, "parentNode should be documentFragment or null" );
-       ok( elems[ 1 ].parentNode == null || elems[ 1 ].parentNode.nodeType === 11, "parentNode should be documentFragment or null" );
-
-       equal( elems[ 0 ].innerHTML, "test div", "Content should be preserved" );
-       equal( elems[ 1 ].innerHTML, "test p", "Content should be preserved" );
-
-       equal( jQuery.clean([ "<span><span>" ]).length, 1, "Incorrect html-strings should not break anything" );
-
-       elems = jQuery.clean([ "<td><td>" ]);
-       ok( elems[ 1 ].parentNode == null || elems[ 1 ].parentNode.nodeType === 11, "parentNode should be documentFragment or null" );
-});
-
 if ( jQuery.css ) {
        test( "HTML5 Elements inherit styles from style rules (Bug #10501)", function() {