2011-06-20 37 views
3

我使用json對象解決了這個問題,在json對象中存儲元素及其位置。現在,我可以很容易地改變元素值:jquery元素集合中的開關元素位置

myJsonObject = {el:[pos: 1, el: element1], el2:[pos: 2, el: element2], etc} 

我有一個對象,它是DOM元素的集合,即:

var els = $('#myDiv div'); 

什麼,我需要做的是開關的位置包含在這個對象中的兩個元素。例如:element[2]代替element[4]element[4]得到element[2]

通過論壇我發現一個數組原型的功能做在陣列閱讀: Reordering arrays

,但我不能用它的原因我的不是數組。 Jquery有一個函數可以將對象轉換爲名爲makeArray的數組,但是我必須將其保留爲對象,否則我無法使用後來需要遍歷我的對象的所有jquery方法。 有沒有人有任何想法?

+0

什麼是上下文嗎?你爲什麼需要重新排序呢? – Neal

+0

嗨,我正在做一個'spacecollective.org'佈局。當我點擊一些元素時,單擊的元素必須進一步移動幾步,以保持佈局正確,並進行排序。我不確定我是否清楚,但是如果您看看spacecollective,您會看到我的意思(只需點擊連續的最後兩個元素).. – hcvitto

回答

1

JQuery的選擇只是增強陣列,這樣你就可以直接使用數組符號進行修改。

var selection = $('#myDiv div'); 
var tmp = selection[2]; 
selection[2] = selection[4]; 
selection[4] = tmp; 

我不相信,你在做什麼是一個好主意,但上面的應該工作。


順便說一句,一般來說,如果你有節點的數組,或節點列表,那麼你可以通過將其作爲參數傳遞給$()把它變成一個jQuery選擇:

var nodes = documents.getElementsByTagName('p'); // Returns an ordinary NodeList 
$(nodes).hide(); // You can run JQuery methods on the NodeList by passing it to $() 
0

你可以嘗試這樣的事情(瘋狂的代碼,同意):

var els = $('#myDiv div'); 

var el2 = els.eq(1); // second element in collection 
var el2clone = el2.clone(true); 
var el4 = els.eq(3); // fourth element in collection 

el2clone.after(el4); 
el4.after(el2); 
el2.remove(); 

els = $('#myDiv div'); 
+0

我不知道你爲什麼要克隆元素。克隆創建一個新的元素,這不是OP想要的。 –

+0

@Daniel Cassidy你知道另一種在DOM中切換兩個元素的方法嗎? – CoolEsh

+0

我的理解是他想要在**選擇**中改變自己的位置,但問題不明確,所以我可能弄錯了。此外,可以在不克隆DOM的情況下切換DOM中的兩個元素,雖然它很麻煩,JQuery也沒有提供任何幫助。 –