2012-08-07 47 views
0

我试图使用jQuery的add函数......但是当合并3000+个DOM元素的对象时,它会冻结。有没有更快的方法可以实现这一目标?如何将大型jQuery对象的数组合并成一个?

var a = []; 
a[0] = $('small'); 
a[1] = $('.no'); 
a[2] = $('.yes'); 
//a is array of jQuery objects 

//make b an empty jQuery object. loop through a, adding each to b 
var b = $(); 
for(var i in a) { 
    b = b.add(a[i]); 
} 
//browser freezes for a bit 
console.log(b); 

编辑:不要问我为什么有这么多的DOM元素,我的压力测试一个jQuery插件,我写:d

+1

你为什么要合并3000个DOM元素?你能做一些能影响所有人的父母吗?或更好的是,存储你的数据独立于dom,所以你根本不必碰它? – 2012-08-07 01:33:19

+0

为什么你需要在一个jQuery对象中选择3000多个DOM元素? – 2012-08-07 01:34:09

回答

1

这可能帮助:API:http://api.jquery.com/jQuery.merge/

$.merge([0,1,2], [2,3,4]) 

请让我知道我是否缺少任何东西,休息这个API应该帮助你合并。 :)

$.merge()操作形成一个数组,其中包含两个数组中的所有元素。数组中项目的顺序被保留,附加第二个数组的项目。 $ .merge()函数具有破坏性。它改变了第一个参数来添加第二个参数。

var a = []; 
a[0] = $('small'); 
a[1] = $('.no'); 
a[2] = $('.yes'); 

// now to merge 2 arrays 

$.merge(a, b) // a & b are arrays. 
+0

改变'b = b.add(a [i]);'到'b = $ .merge(b,a [i]);'立即。谢谢! – 2012-08-07 01:42:28

+0

@StephenSarcsamKamenar ** MAGIC !! ** Saweet man! ':''很高兴帮助你! – 2012-08-07 01:42:52

+1

只是让别人知道。之所以这么快,是因为它不会尝试去除重复的元素,而“add”则会。 – 2012-08-07 01:53:37

5

尽管我的意见,你可以只是做

$('small, .no, .yes')

+0

哈哈,是的。这是很好的建议,我会投票支持,以便其他人可以看到它。但是对于我在做的事情,我需要在不同的对象中进行。 – 2012-08-07 01:45:03

相关问题