2013-03-07 11 views
6

znajduje się lista elementów, powiedzmy, że niektóre obrazy:Jak zaktualizować obiekt jQuery zawierający listę elementów po przeprowadzce element

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

ja je wybrać i zapisać wynik w zmiennej:

var elements = $('img'); 

Teraz chcę przenieść ostatni obraz na pierwszą pozycję. Współpracuje tak:

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

Po tym obiektem elements naturalnie nadal posiada wartości w kolejności ich gdzie przedtem. mogę zaktualizować to poprzez odpytywanie ponownie po zmianie:

elements = $('img'); 

Ale wydaje się nieefektywne, aby uruchomić kolejne zapytanie, kiedy mam już wszystkie elementy razem. Ponadto, ponieważ nie jest to tablica, to nie zadziała:

Jaki jest najlepszy sposób aktualizacji listy obiektów w takim przypadku?

+0

'$ ('img') toArray()' zwraca tablicę dopasowanych elementów.. – Michael

+0

'var elements = $ ('img'). Get();' sprawi, że będzie to tablica elementów DOM. – Johan

+1

Komentarze informują o tym, jak uzyskać tablicę, nie zdając sobie sprawy, że próbujesz m zmodyfikować kolekcję_. – Mathletics

Odpowiedz

3

Podrób to!

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

Demo


Zastrzeżenie: Wątpię, jest to szybsze niż ponowne wykonanie zapytania.

+0

Podrób to! lubię to! – sabithpocker

+0

+1 Dziękuję za tę miłą odpowiedź.Wydaje mi się, że tym razem będę ponownie przesyłać zapytania, ponieważ inni ludzie pracujący nad projektem mogą być zdezorientowani, widząc ten wiersz kodu. * Hehe * :) – insertusernamehere

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

Są dwie rzeczy się tu dzieje.

Masz zestaw elementów w DOM i zmiennej zawierającej fragment DOM odwołań do tych elementów.

Funkcje jQuery first() i last() przenoszą elementy w DOM, ale nie wiedzą nic o zmiennej.

Z punktu widzenia prostoty kodu sugerowany kod jest najbardziej czytelny i powinien być w porządku, chyba że często go wywołujesz.

elements = $('img'); 

przeciwnym razie wyłączyć zmienną do tablicy:

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

+1 Dla "* Z punktu widzenia prostoty kodu, sugerowany kod jest najbardziej czytelny [...] *. Tak też się domyślałem. – insertusernamehere

Powiązane problemy