Я немного не в себе и надеюсь, что это действительно возможно.
Я хотел бы иметь возможность вызывать функцию, которая сортирует все элементы в моем списке в алфавитном порядке.
Я просматривал jQuery UI для сортировки, но это не так. Есть предположения?
javascript
jquery
dom
sorting
Shog9
источник
источник
Ответы:
Вам не нужен jQuery, чтобы сделать это ...
Легко использовать...
Live Demo →
источник
Что-то вроде этого:
С этой страницы: http://www.onemoretake.com/2009/02/25/sorting-elements-with-jquery/
Приведенный выше код отсортирует ваш неупорядоченный список с идентификатором 'myUL'.
ИЛИ вы можете использовать плагин, как TinySort. https://github.com/Sjeiti/TinySort
источник
живая демонстрация: http://jsbin.com/eculis/876/edit
источник
$(".list li").sort(function(a, b){return ($(b).text()) < ($(a).text());}).appendTo('.list');
. Одно замечание:.text()
должно быть.text().toUpperCase()
$(".list").children()
, если это возможно, или настроить селектор с непосредственными дочерними отношениями, такими как$(".list > li")
Чтобы эта работа работала со всеми браузерами, включая Chrome, необходимо, чтобы функция обратного вызова sort () возвращала -1,0 или 1.
см. http://inderpreetsingh.com/2010/12/01/chromes-javascript-sort-array-function-is-different-yet-proper/
источник
Если вы используете jQuery, вы можете сделать это:
Обратите внимание, что возврат 1 и -1 (или 0 и 1) из функции сравнения абсолютно неверен .
источник
@ SolutionYogi ответ работает как очарование, но кажется, что использование $ .each менее просто и эффективно, чем прямое добавление элементов списка:
скрипка
источник
улучшение, основанное на ответе Джетендры Чаухан
почему я считаю это улучшением:
использовать
each
для поддержки работы на более чем одной улважно использовать
children('li')
вместо,('ul li')
потому что мы хотим обрабатывать только прямые потомки, а не потомкииспользование функции со стрелкой
(a,b)=>
выглядит лучше (IE не поддерживается)использование ванили
innerText
вместо$(a).text()
повышения скоростииспользование ванили
localeCompare
улучшает скорость в случае равных элементов (редко в реальной жизни)использование
appendTo(this)
вместо использования другого селектора гарантирует, что даже если селектор ловит более одного уль, все равно ничего не сломаетсяисточник
Я искал сделать это сам, и я не был удовлетворен ни одним из ответов, предоставленных просто потому, что, я полагаю, это квадратичное время, и мне нужно сделать это в списках сотен пунктов длиной.
Я закончил расширять jquery, и мое решение использует jquery, но его можно легко изменить, чтобы использовать прямой javascript.
Я только получаю доступ к каждому элементу дважды и выполняю одну линейную сортировку, так что, я думаю, это должно работать намного быстрее на больших наборах данных, хотя я свободно признаюсь, что могу ошибаться там:
источник
Поместите список в массив, используйте JavaScript
.sort()
, который по умолчанию является алфавитным, затем преобразуйте массив обратно в список.http://www.w3schools.com/jsref/jsref_sort.asp
источник
HTML
JavaScript
Демонстрация JSFiddle https://jsfiddle.net/97oo61nw/
Здесь мы помещаем все значения
li
элементов внутриul
с определеннымid
(который мы предоставили в качестве аргумента функции) в массивarr
и сортируем его, используя метод sort (), который по умолчанию сортируется по алфавиту. Послеarr
сортировки массива мы зацикливаем этот массив с помощью метода forEach () и просто заменяем текстовое содержимое всехli
элементов отсортированным содержимымисточник