Ich bin hier etwas überfordert und hoffe, dass dies tatsächlich möglich ist.
Ich möchte eine Funktion aufrufen können, die alle Elemente in meiner Liste alphabetisch sortiert.
Ich habe die jQuery-Benutzeroberfläche nach Sortierung durchsucht, aber das scheint es nicht zu sein. Irgendwelche Gedanken?
javascript
jquery
dom
sorting
Shog9
quelle
quelle
Antworten:
Sie benötigen dazu nicht jQuery ...
Einfach zu verwenden...
Live-Demo →
quelle
Etwas wie das:
Von dieser Seite: http://www.onemoretake.com/2009/02/25/sorting-elements-with-jquery/
Der obige Code sortiert Ihre ungeordnete Liste mit der ID 'myUL'.
ODER Sie können ein Plugin wie TinySort verwenden. https://github.com/Sjeiti/TinySort
quelle
Live-Demo: http://jsbin.com/eculis/876/edit
quelle
$(".list li").sort(function(a, b){return ($(b).text()) < ($(a).text());}).appendTo('.list');
. Eine Bemerkung:.text()
sollte sein.text().toUpperCase()
$(".list").children()
Wenn möglich, rufen Sie besser an oder richten Sie den Selektor mit einer unmittelbaren Kinderbeziehung wie$(".list > li")
Damit dies mit allen Browsern einschließlich Chrome funktioniert, muss die Rückruffunktion von sort () -1,0 oder 1 zurückgeben.
siehe http://inderpreetsingh.com/2010/12/01/chromes-javascript-sort-array-function-is-different-yet-proper/
quelle
Wenn Sie jQuery verwenden, können Sie dies tun:
Beachten Sie, dass die Rückgabe von 1 und -1 (oder 0 und 1) von der Vergleichsfunktion absolut falsch ist .
quelle
@ SolutionYogis Antwort funktioniert wie ein Zauber, aber es scheint, dass die Verwendung von $ .each weniger einfach und effizient ist als das direkte Anhängen von Listenelementen:
Geige
quelle
Verbesserung basierend auf Jeetendra Chauhans Antwort
warum ich es für eine Verbesserung halte:
Verwenden
each
, um das Laufen auf mehr als einer Ul zu unterstützenVerwenden von
children('li')
anstelle von('ul li')
ist wichtig, da wir nur direkte Kinder und keine Nachkommen verarbeiten möchtenDie Verwendung der Pfeilfunktion
(a,b)=>
sieht einfach besser aus (IE wird nicht unterstützt).Verwenden Sie Vanille
innerText
anstelle$(a).text()
zur GeschwindigkeitsverbesserungDie Verwendung von Vanille
localeCompare
verbessert die Geschwindigkeit bei gleichen Elementen (selten im realen Gebrauch).Verwendung
appendTo(this)
stattdessen einen anderen Wähler der Verwendung dafür sorgen, dass auch wenn die Wähler Fänge mehr als eine ul noch nichts brichtquelle
Ich habe versucht, dies selbst zu tun, und ich war mit keiner der Antworten zufrieden, nur weil ich glaube, dass es sich um eine quadratische Zeit handelt, und ich muss dies auf Listen mit Hunderten von Elementen tun.
Am Ende habe ich jquery erweitert, und meine Lösung verwendet jquery, könnte aber leicht geändert werden, um direktes Javascript zu verwenden.
Ich greife nur zweimal auf jedes Element zu und führe eine linearithmische Sortierung durch. Ich denke, dies sollte sich bei großen Datenmengen als viel schneller herausstellen, obwohl ich frei gestehe, dass ich mich dort irren könnte:
quelle
Fügen Sie die Liste in ein Array ein, verwenden Sie JavaScript
.sort()
, das standardmäßig alphabetisch ist, und konvertieren Sie das Array zurück in eine Liste.http://www.w3schools.com/jsref/jsref_sort.asp
quelle
HTML
JavaScript
JSFiddle Demo https://jsfiddle.net/97oo61nw/
Hier werden alle Werte von
li
Elementenul
mit einem bestimmten Elementid
(das wir als Funktionsargument angegeben haben) in das Array verschobenarr
und mit der Methode sort () sortiert, die standardmäßig alphabetisch sortiert ist. Nachdem das Arrayarr
sortiert wurde, werden wir dieses Array mit der forEach () -Methode durchlaufen und ersetzen einfach den Textinhalt allerli
Elemente durch sortierten Inhaltquelle