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

1 комментарий

  • Сергей:

    Большое спасибо за скрипт. Искал в гугле такое решение но находил только многофункциональные и следовательно тяжеловесные решения в основном на jquery UI. А тут всего пара строчек js кода очень удобно.

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


(обязательно)