Estoy un poco fuera de mi alcance aquí y espero que esto sea realmente posible.
Me gustaría poder llamar a una función que ordenaría alfabéticamente todos los elementos de mi lista.
He estado buscando en la interfaz de usuario jQuery para ordenar, pero eso no parece ser así. ¿Alguna idea?
javascript
jquery
dom
sorting
Shog9
fuente
fuente
Respuestas:
Usted no necesita jQuery para hacer esto ...
Fácil de usar...
Demostración en vivo →
fuente
Algo como esto:
Desde esta página: http://www.onemoretake.com/2009/02/25/sorting-elements-with-jquery/
El código anterior ordenará su lista desordenada con la identificación 'myUL'.
O puede usar un complemento como TinySort. https://github.com/Sjeiti/TinySort
fuente
demostración en vivo: http://jsbin.com/eculis/876/edit
fuente
$(".list li").sort(function(a, b){return ($(b).text()) < ($(a).text());}).appendTo('.list');
. Sin embargo, un comentario:.text()
debería ser.text().toUpperCase()
$(".list").children()
, si es posible, o configurar el selector con una relación infantil inmediata como$(".list > li")
Para que este trabajo funcione con todos los navegadores, incluido Chrome, debe hacer que la función de devolución de llamada de sort () devuelva -1,0 o 1.
ver http://inderpreetsingh.com/2010/12/01/chromes-javascript-sort-array-function-is-different-yet-proper/
fuente
Si está utilizando jQuery, puede hacer esto:
Tenga en cuenta que devolver 1 y -1 (o 0 y 1) de la función de comparación es absolutamente incorrecto .
fuente
@ Solución La respuesta de Yogi funciona de maravilla, pero parece que usar $ .each es menos sencillo y eficiente que agregar elementos de lista directamente:
Violín
fuente
mejora basada en la respuesta de Jeetendra Chauhan
por qué lo considero una mejora:
usando
each
para soportar correr en más de un ulusar en
children('li')
lugar de('ul li')
es importante porque solo queremos procesar hijos directos y no descendientesel uso de la función de flecha se
(a,b)=>
ve mejor (IE no es compatible)usando vainilla en
innerText
lugar de$(a).text()
para mejorar la velocidadel uso de vainilla
localeCompare
mejora la velocidad en caso de elementos iguales (raro en el uso de la vida real)usar en
appendTo(this)
lugar de usar otro selector se asegurará de que incluso si el selector atrapa más de un ul todavía no se rompe nadafuente
Estaba buscando hacer esto yo mismo, y no estaba satisfecho con ninguna de las respuestas proporcionadas simplemente porque, creo, son de tiempo cuadrático, y necesito hacerlo en las listas de cientos de elementos.
Terminé extendiendo jquery, y mi solución usa jquery, pero podría modificarse fácilmente para usar JavaScript directo.
Solo accedo a cada elemento dos veces y realizo un tipo linealitmico, así que creo que esto debería funcionar mucho más rápido en grandes conjuntos de datos, aunque confieso libremente que podría estar equivocado allí:
fuente
Coloque la lista en una matriz, use JavaScript
.sort()
, que es alfabéticamente predeterminado, luego convierta la matriz nuevamente en una lista.http://www.w3schools.com/jsref/jsref_sort.asp
fuente
HTML
JavaScript
Demostración de JSFiddle https://jsfiddle.net/97oo61nw/
Aquí estamos empujando todos los valores de los
li
elementos dentroul
con específicosid
(que proporcionamos como argumento de función) paraarr
ordenarlos y ordenarlos usando el método sort () que está ordenado alfabéticamente por defecto. Después dearr
ordenar la matriz, hacemos un bucle de esta matriz usando el método forEach () y simplemente reemplazamos el contenido de texto de todos losli
elementos con contenido ordenadofuente