2012-08-07 81 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

相關問題