Jquery UI Sortable, автоматическая сортировка объектов по нажатию кнопки.
Необходимо при нажатии на кнопку отсортировать все объекты по имени(допустим имя будет храниться в каком либо атрибуте вложенного в LI объекта).
Но нужного метода не нашел. Возможно ли это реализовать методами данного плагина? Или хотя бы как программно(в смысле не двигая мышкой) менять положения блоков <li> в объекте <ul>? Принимаются советы и без использования Jquery. Заранее спасибо. |
Цитата:
<!DOCTYPE html> <html> <head> <style> </style> <script> function fnSwap(){ oList.children(0).swapNode(oList.children(1)); } </script> </head> <body> <UL ID = oList> <LI>List Item 1 <LI>List Item 2 <LI>List Item 3 <LI>List Item 4 </UL> <INPUT TYPE = 'button' VALUE = "Swap List" onclick = "fnSwap()"> </body> </html> |
млин... ИЕ онли...
|
Вот так...
<!DOCTYPE html> <html> <head> <style> </style> <script> function Sort() { var o=document.getElementById('oList') var ol=o.getElementsByTagName('li') var i var move do { move=false for (i=0; i<ol.length-1; i++) { if (ol[i].innerHTML>ol[i+1].innerHTML) { o.appendChild(ol[i]) move=true } } } while (move) } </script> </head> <body> <UL ID = 'oList'> <LI>List Item 2</LI> <LI>List Item 4</LI> <LI>List Item 1</LI> <LI>List Item 3</LI> </UL> <INPUT TYPE = 'button' VALUE = "Sort List" onclick = "Sort()"> </body> </html> |
ещё вариант...сортировка вынесена в отдельную функцию, поэтому условия сортировки можно легко менять, в данном случае корректно отсортирует List Item больше 9
<!DOCTYPE html> <html> <head> <style> </style> <script> function Sort() { var f = document.getElementById("oList"), b = f.getElementsByTagName("li"), a, c = []; for (a = 0; a < b.length; a++) c[a] = b[a]; c.sort(function (d, e) { d = +d.innerHTML.replace(/.*?(\d+).*?/, "$1"); e = +e.innerHTML.replace(/.*?(\d+).*?/, "$1"); return d - e }); for (a = 0; a < b.length; a++) f.appendChild(c[a]) }; </script> </head> <body> <UL ID = 'oList'> <LI>List Item 2</LI> <LI>List Item 33</LI> <LI>List Item 1</LI> <LI>List Item 4</LI> </UL> <INPUT TYPE = 'button' VALUE = "Sort List" onclick = "Sort()"> </body> </html> |
Спасибо большое за варианты!
Воспользовавшись ими и еще 1 темой с этого форума получилось нечто такое. $("#rrr").toggle(function(){ //здесь хранятся объекты var trs = new Array(); //Здесь хранится список названий объектов var seq = new Array(); var i = 0; $("ul#sortable li").each(function() { seq[i]=$("ul#sortable li:eq(" + i + ") .name").html(); trs[seq[i]] = $("ul#sortable li:eq(" + i + ")"); i ++; }); //сортируем список названий объектов seq.sort() var o=seq.length; for (a = -1; a < seq.length; a++){ var tr=trs[seq[o]] if (typeof(tr) != 'undefined') { tr.insertAfter($("ul#sortable li:eq(" + a + ")")); } o--; } return false; }, function(){ var trs = new Array(); var seq = new Array(); var i = 0; $("ul#sortable li").each(function() { seq[i]=$("ul#sortable li:eq(" + i + ") .name").html(); trs[seq[i]] = $("ul#sortable li:eq(" + i + ")"); i ++; }); seq.sort() var o=0; for (a = -1; a < seq.length-1; a++){ var tr=trs[seq[0]] if (typeof(tr) != 'undefined') { tr.insertAfter($("ul#sortable li:eq(" + a + ")")); } o++ } return false; }); И того должна получиться сортировка по возрастанию и убыванию. Но почему то исчезает самый маленький элемент. Я думаю что он просто не вставляется здесь tr.insertAfter($("ul#sortable li:eq(" + a + ")")); Но как я не мучался, ничего не получается. Может вы подскажете что я не так делаю? |
Часовой пояс GMT +3, время: 06:33. |