jQuery附加html与追加现有元素

我有一个字符串big_html,我想将它添加到一些div.我观察到以下性能差异:
$('#some-div').append( big_html );
// takes about 100 ms

//create it first
var append_objs = $(big_html);
$('#some-div').append( append_objs );
//takes about 150 ms

有谁知道为什么会这样?感谢您的时间.

编辑:
我正在尝试获取我正在添加页面内容.我也试过了

var added = $(big_html).appendTo( '#some-div' );
//150 ms

有没有一种有效的方法来做到这一点?

解决方法

在第二种情况下,jQuery让浏览器构建一个文档片段然后将HTML填入其中以供浏览器解析.然后,当您将其附加到页面时,您可以再次操作DOM.

因此,第二个版本只是做比第一个更多的工作.

我鼓励你(和所有感兴趣的人)保持jQuery的非缩小版本以供阅读.阅读代码是很有启发性的.

在将内容添加到DOM排序后“获取内容取决于它的内容.由于内容被追加,你必须首先记住目标的最后一个元素:

var last = $('#some_div > *:last');
$('#some_div').append(big_html_string);
var newStuff = last.nextAll();

如果目标div可能开始为空,您还需要检查它:

var newStuff = last.length ? last.nextAll() : $('#some_div > *');

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...