Вот решение с использованием jQuery:
var mylist = $(''#my-ul''); var listitems = mylist.children(''li'').get(); listitems.sort(function(a, b) { var compA = $(a).text().toUpperCase(); var compB = $(b).text().toUpperCase(); return (compA < compB) ? -1 : (compA > compB) ? 1 : 0; }) $.each(listitems, function(idx, itm) { mylist.append(itm); });
Без jQuery код будет тоже очень коротким, можно ещё выкинуть возможность сортировки в обратном порядке, если она не требуется:
function sortUnorderedList(ul, sortDescending) { if(typeof ul == "string") ul = document.getElementById(ul); // Получаем ячейки списка в массив var lis = ul.getElementsByTagName("LI"); var vals = []; for(var i = 0, l = lis.length; i < l; i++) vals.push(lis[i].innerHTML); // Сортируем их vals.sort(); // Если в обрятном порядке, то оборачиваем if(sortDescending) vals.reverse(); // Меняем содержимое элементов списка for(i = 0, l = lis.length; i < l; i++) lis[i].innerHTML = vals[i]; }
Использование:
sortUnorderedList("list-id"); // Сортируем список с id="list-id" в прямом порядке sortUnorderedList("list-id", true); // В обратном порядке