Jestem trochę z głębi i mam nadzieję, że to rzeczywiście możliwe.
Chciałbym móc wywołać funkcję, która sortowałaby wszystkie elementy na mojej liście alfabetycznie.
Przeglądałem interfejs użytkownika jQuery pod kątem sortowania, ale tak nie jest. jakieś pomysły?
javascript
jquery
dom
sorting
Shog9
źródło
źródło
Odpowiedzi:
Zdajesz nie potrzeba jQuery to zrobić ...
Łatwy w użyciu...
Demo na żywo →
źródło
Coś takiego:
Z tej strony: http://www.onemoretake.com/2009/02/25/sorting-elements-with-jquery/
Powyższy kod posortuje Twoją nieuporządkowaną listę o identyfikatorze „myUL”.
LUB możesz użyć wtyczki takiej jak TinySort. https://github.com/Sjeiti/TinySort
źródło
demo na żywo: http://jsbin.com/eculis/876/edit
źródło
$(".list li").sort(function(a, b){return ($(b).text()) < ($(a).text());}).appendTo('.list');
. Jedna uwaga:.text()
powinien być.text().toUpperCase()
$(".list").children()
, jeśli to możliwe, lub skonfigurować selektor z bezpośrednią relacją dziecka, np.$(".list > li")
Aby działało to we wszystkich przeglądarkach, w tym w Chrome, musisz ustawić funkcję zwrotną sort () zwracającą -1,0 lub 1.
patrz http://inderpreetsingh.com/2010/12/01/chromes-javascript-sort-array-function-is-different-yet-proper/
źródło
Jeśli używasz jQuery, możesz to zrobić:
Zauważ, że zwracanie 1 i -1 (lub 0 i 1) z funkcji porównania jest absolutnie niepoprawne .
źródło
@ Rozwiązanie Odpowiedź Yogi działa jak urok, ale wydaje się, że użycie $ .each jest mniej proste i wydajne niż bezpośrednie dołączanie listitemów:
Skrzypce
źródło
Poprawa na podstawie Jeetendra Chauhan odpowiedź „s
dlaczego uważam to za ulepszenie:
za pomocą
each
do obsługi działającej na więcej niż jednej ulużywanie
children('li')
zamiast('ul li')
jest ważne, ponieważ chcemy przetwarzać tylko bezpośrednie dzieci, a nie potomkówużycie funkcji strzałki
(a,b)=>
wygląda po prostu lepiej (IE nie jest obsługiwane)używając wanilii
innerText
zamiast$(a).text()
przyspieszeniaużywanie wanilii
localeCompare
poprawia prędkość w przypadku równych elementów (rzadkie w prawdziwym życiu)użycie
appendTo(this)
zamiast użycia innego selektora sprawi, że nawet jeśli selektor złapie więcej niż jedną ul, nadal nic się nie zepsujeźródło
Chciałem to zrobić sam i nie byłem usatysfakcjonowany żadną z udzielonych odpowiedzi po prostu dlatego, że, jak sądzę, są to czasy kwadratowe i muszę to zrobić na listach o długości setek pozycji.
Skończyło się na rozszerzeniu jquery, a moje rozwiązanie używa jquery, ale można je łatwo zmodyfikować, aby używało prostego javascript.
Uzyskuję dostęp do każdego elementu tylko dwa razy i wykonuję jeden sort liniowy, więc myślę, że powinno to działać znacznie szybciej w przypadku dużych zestawów danych, choć swobodnie przyznaję, że mogłem się tutaj pomylić:
źródło
Umieść listę w tablicy, użyj JavaScript
.sort()
, który jest domyślnie alfabetyczny, a następnie przekonwertuj tablicę z powrotem na listę.http://www.w3schools.com/jsref/jsref_sort.asp
źródło
HTML
JavaScript
JSFiddle Demo https://jsfiddle.net/97oo61nw/
Tutaj wypychamy wszystkie wartości
li
elementów zaul
pomocą określonychid
(które podano jako argument funkcji) do tablicyarr
i sortujemy za pomocą metody sort () , która jest domyślnie sortowana alfabetycznie. Poarr
posortowaniu tablicy zapętlamy tę tablicę za pomocą metody forEach () i po prostu zastępujemy zawartość tekstową wszystkichli
elementów posortowaną treściąźródło