diff options
author | jeresig <jeresig@gmail.com> | 2010-01-28 17:18:27 -0500 |
---|---|---|
committer | jeresig <jeresig@gmail.com> | 2010-01-28 17:18:27 -0500 |
commit | 388a00fe918c2ec759bd33c34bfc13aabfe413d0 (patch) | |
tree | 3454418f0fe6a77c73c56e740097155a446b1266 /src/manipulation.js | |
parent | b8076a914ba9d400dc9c48d866b145df6fabafcf (diff) | |
download | jquery-388a00fe918c2ec759bd33c34bfc13aabfe413d0.tar.gz jquery-388a00fe918c2ec759bd33c34bfc13aabfe413d0.zip |
Skip around inserting a fragment when possible (insert the node directly).
Diffstat (limited to 'src/manipulation.js')
-rw-r--r-- | src/manipulation.js | 20 |
1 files changed, 13 insertions, 7 deletions
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 ); } } |