Je suis un peu hors de ma profondeur ici et j'espère que c'est réellement possible.
J'aimerais pouvoir appeler une fonction qui trierait tous les éléments de ma liste par ordre alphabétique.
J'ai cherché dans l'interface jQuery pour le tri, mais cela ne semble pas être le cas. Des pensées?
javascript
jquery
dom
sorting
Shog9
la source
la source
Réponses:
Vous n'avez pas besoin de jQuery pour ce faire ...
Facile à utiliser...
Démo en direct →
la source
Quelque chose comme ça:
Depuis cette page: http://www.onemoretake.com/2009/02/25/sorting-elements-with-jquery/
Le code ci-dessus triera votre liste non ordonnée avec l'ID 'myUL'.
OU vous pouvez utiliser un plugin comme TinySort. https://github.com/Sjeiti/TinySort
la source
démo en direct: http://jsbin.com/eculis/876/edit
la source
$(".list li").sort(function(a, b){return ($(b).text()) < ($(a).text());}).appendTo('.list');
. Une remarque cependant:.text()
devrait être.text().toUpperCase()
$(".list").children()
, si possible, ou configurer le sélecteur avec une relation immédiate avec l'enfant comme$(".list > li")
Pour que cela fonctionne avec tous les navigateurs, y compris Chrome, vous devez faire en sorte que la fonction de rappel de sort () renvoie -1,0 ou 1.
voir http://inderpreetsingh.com/2010/12/01/chromes-javascript-sort-array-function-is-different-yet-proper/
la source
Si vous utilisez jQuery, vous pouvez le faire:
Notez que renvoyer 1 et -1 (ou 0 et 1) à partir de la fonction de comparaison est absolument faux .
la source
@ La réponse de SolutionYogi fonctionne comme un charme, mais il semble que l'utilisation de $ .each soit moins simple et efficace que l'ajout direct de listitems:
Violon
la source
amélioration basée sur la réponse de Jeetendra Chauhan
pourquoi je considère cela comme une amélioration:
utilisation
each
pour prendre en charge l'exécution sur plusieurs ulutiliser
children('li')
au lieu de('ul li')
est important parce que nous voulons uniquement traiter les enfants directs et non les descendantsl'utilisation de la fonction flèche
(a,b)=>
semble juste meilleure (IE non pris en charge)en utilisant de la vanille
innerText
au lieu de$(a).text()
pour améliorer la vitessel'utilisation de la vanille
localeCompare
améliore la vitesse en cas d'éléments égaux (rare dans la vie réelle)utiliser
appendTo(this)
au lieu d'utiliser un autre sélecteur s'assurera que même si le sélecteur attrape plus d'un ul toujours rien ne cassela source
Je cherchais à le faire moi-même, et je n'étais satisfait d'aucune des réponses fournies simplement parce que, je pense, elles sont quadratiques, et je dois le faire sur des listes de centaines d'articles.
J'ai fini par étendre jquery, et ma solution utilise jquery, mais pourrait facilement être modifiée pour utiliser du javascript simple.
Je n'accède à chaque élément que deux fois et j'effectue un tri linéaire, donc je pense que cela devrait être beaucoup plus rapide sur les grands ensembles de données, bien que j'avoue librement que je peux me tromper:
la source
Mettez la liste dans un tableau, utilisez JavaScript
.sort()
, qui est par défaut alphabétique, puis reconvertissez le tableau en liste.http://www.w3schools.com/jsref/jsref_sort.asp
la source
HTML
Javascript
Démo JSFiddle https://jsfiddle.net/97oo61nw/
Ici, nous poussons toutes les valeurs des
li
éléments à l'intérieurul
avec spécifiqueid
(que nous avons fourni comme argument de fonction) pour le tableauarr
et le trier en utilisant la méthode sort () qui est triée alphabétiquement par défaut. Une fois le tableauarr
trié, nous bouclons ce tableau en utilisant la méthode forEach () et nous remplaçons simplement le contenu textuel de tous lesli
éléments par du contenu triéla source