From: jeresig Date: Thu, 28 Jan 2010 22:18:27 +0000 (-0500) Subject: Skip around inserting a fragment when possible (insert the node directly). X-Git-Tag: 1.4.2~49 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=388a00fe918c2ec759bd33c34bfc13aabfe413d0;p=jquery.git Skip around inserting a fragment when possible (insert the node directly). --- diff --git a/src/manipulation.js b/src/manipulation.js index 01c6b0ba7..93950de0f 100644 --- a/src/manipulation.js +++ b/src/manipulation.js @@ -296,7 +296,7 @@ jQuery.fn.extend({ }, domManip: function( args, table, callback ) { - var results, first, value = args[0], scripts = []; + var results, first, value = args[0], scripts = [], fragment; // We can't cloneNode fragments that contain checked, in WebKit if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) { @@ -320,8 +320,14 @@ jQuery.fn.extend({ } else { results = buildFragment( args, this, scripts ); } - - first = results.fragment.firstChild; + + fragment = results.fragment; + + if ( fragment.childNodes.length === 1 ) { + first = fragment = fragment.firstChild; + } else { + first = fragment.firstChild; + } if ( first ) { table = table && jQuery.nodeName( first, "tr" ); @@ -331,14 +337,14 @@ jQuery.fn.extend({ table ? root(this[i], first) : this[i], - results.cacheable || this.length > 1 || i > 0 ? - results.fragment.cloneNode(true) : - results.fragment + i > 0 || results.cacheable || this.length > 1 ? + fragment.cloneNode(true) : + fragment ); } } - if ( scripts ) { + if ( scripts.length ) { jQuery.each( scripts, evalScript ); } }