Как отсортировать список по алфавиту на JavaScript?

Вопрос

Задача: есть некий список (ul), и в нём есть ячейки (li). Необходимо отсортировать их в алфавитном порядке по значению содержимого этих ячеек. Естественно, значение может содержать не только английские, но и кириллические символы. Какое решение предложите?

Ответ №1

Вот решение с использованием 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); // В обратном порядке

No responses yet

Добавить комментарий