2012-12-12 11 views
7

Używam JQuery Sortable. Chciałbym wiedzieć, czy możliwe jest, po wielu przywłaszczeniach, przywrócenie kontroli sortowania do pierwotnego stanu podobnego do resetowania formularza. Opcja "anuluj" tylko wydaje się wpływać na ostatnią próbę sortowania nie wszystkie z nich.Jak wykonać reset w JQuery Sortable

+0

może przechowywać kolejność domyślną atrybutu danych? –

Odpowiedz

2

Zapisz referencję do pierwotnej kolejności elementów, a następnie użyj jej do ponownego zamówienia.

var sortableElements = $("#sortable div"); 
$("#sortable").sortable(); 

Teraz, gdy chcesz przywrócić pierwotną kolejność sortowania, po prostu dodaj elementy div do elementu #sortable.

$("#sortable").append(sortableElements); 
1

Możesz buforować kopię dokumentu nadrzędnego na gotowym dokumencie i przywrócić go po zresetowaniu.

Na przykład, jeśli <ul class="parent"> to sortable elementu:

var sortableCache; 
$(document).ready(function() { 
    ... 
    $('ul.parent').sortable({ ... }); 
    ... 
    sortableCache = $('ul.parent').clone(true); 
}); 

Na resecie można zrobić:

$('ul.parent').replaceWith(sortableCache); 
13

ja osobiście jak robi to w ten sposób:

$("#sortable").sortable({config...}); 
var cache = $("#sortable").html(); 

Po zresetowaniu

$("#sortable").html(cache).sortable("refresh"); 

Próbowałem używać .clone() and.children(), a nawet $ ("# sortable> *), ale znajduję caching .html() najlepszą opcją.

W mojej sytuacji mam dwie połączone listy. Jedna zawiera bieżące elementy, które użytkownik może sortować lub usuwać, oraz inną listę dostępnych elementów, które użytkownik może pobrać od użytkownika, aby dodać ją do listy "bieżącego przedmiotu". Potrzebowałem sposobu na zresetowanie wszystkiego do pierwotnego stanu. Powyższe działa świetnie.

+0

To rozwiązanie nie działa, jeśli jako źródła masz wiele list opartych na klasach. Używam 2 list, aby podać do jednego - gdzie mój selektor jest klasą. Szkoda, że ​​nie ma oficjalnego "resetu", który zna źródło każdego z przedmiotów do odzyskania. – Antony

0

to prosty sposób

$("#sortable").sortable("cancel"); 
+0

Spowoduje to tylko cofnięcie ostatniej posortowanej zmiany. Jeśli posortuję wiele, a następnie wykonam to, to nie będzie działać dla nich wszystkich –