2013-03-07 40 views
6

有元素的列表之後元素的列表jQuery對象,讓我們說一些圖片:如何更新包含移動元素

<img src="" alt=""> 
<img src="" alt=""> 
<img src="" alt=""> 

我選擇它們,結果存儲在一個變量:

var elements = $('img'); 

現在我想把最後一張圖像放到第一個位置。它工作正常,像這樣:

elements.first().before(elements.last()); 

之後,對象elements自然仍持有他們以前在那裏的順序值。我可以通過移位後再次查詢更新此:

elements = $('img'); 

但似乎效率不高時,我已經把所有的元素結合在一起運行另一個查詢。此外,因爲它不是一個數組,這將不起作用:

elements.unshift(elements.pop()); 

什麼是更新在這樣的情況下,對象列表的最佳方式?

+0

'$( 'IMG')指定者()'將返回匹配的元素的陣列。 – Michael 2013-03-07 18:24:56

+0

'var elements = $('img')。get();'會使它成爲DOM元素的數組。 – Johan 2013-03-07 18:28:06

+1

這些註釋告訴你如何獲得一個數組而不會意識到你正試圖修改collection_。 – Mathletics 2013-03-07 18:29:07

回答

3

假的!

[].unshift.call(elements, [].pop.call(elements)) 

Demo


警告:我懷疑這是不是重新執行查詢速度更快。

+0

假!我喜歡! – sabithpocker 2013-03-07 18:41:46

+0

+1感謝這個不錯的答案。我認爲我這次堅持要重新查詢,因爲參與這個項目的其他人可能會看到這行代碼時感到困惑。 *嘿嘿* :) – insertusernamehere 2013-03-09 10:48:45

0
<div class="container"> 
<img src="" alt=""> 
<img src="" alt=""> 
<img src="" alt=""> 
</div> 

$('.container img:last-child').prependTo('.container'); //would work 

$('img:last', elements).prependTo(elements); 
// i think this will also work if you need to cache it 
1

有兩件事情怎麼回事。

在DOM中有一組元素,並且有一個變量持有對這些元素的引用的DOM片段。

jQuery first()last()函數正在移動DOM中的元素,但他們不知道有關變量的任何信息。

從代碼簡單的角度來看,您的建議代碼是最具可讀性的,除非您打電話過多,否則應該沒問題。

elements = $('img'); 

否則,轉動變量到一個數組:

var elementsarray = []; 
elements.each(function(i) { elementsarray[] = this; }); 
+0

+1對於「*從代碼簡單的角度來看,您建議的代碼是最具可讀性的[*] *,這是我最後想到的。 – insertusernamehere 2013-03-09 10:52:27