Estou um pouco fora da minha profundidade aqui e espero que isso seja realmente possível.
Eu gostaria de poder chamar uma função que classificaria todos os itens da minha lista em ordem alfabética.
Eu estive procurando na interface do usuário do jQuery para classificar, mas isso não parece ser o caso. Alguma ideia?
javascript
jquery
dom
sorting
Shog9
fonte
fonte
Respostas:
Você não precisa do jQuery para fazer isso ...
Fácil de usar...
Demonstração ao vivo →
fonte
Algo assim:
Nesta página: http://www.onemoretake.com/2009/02/25/sorting-elements-with-jquery/
O código acima ordenará sua lista não ordenada com o ID 'myUL'.
OU você pode usar um plugin como o TinySort. https://github.com/Sjeiti/TinySort
fonte
demonstração ao vivo: http://jsbin.com/eculis/876/edit
fonte
$(".list li").sort(function(a, b){return ($(b).text()) < ($(a).text());}).appendTo('.list');
. Uma observação, porém:.text()
deveria ser.text().toUpperCase()
$(".list").children()
, se possível, ou configurar o seletor com um relacionamento imediato com o filho, como$(".list > li")
Para que este trabalho funcione com todos os navegadores, incluindo o Chrome, você precisa fazer com que a função de retorno de chamada de sort () retorne -1,0 ou 1.
consulte http://inderpreetsingh.com/2010/12/01/chromes-javascript-sort-array-function-is-different-yet-proper/
fonte
Se você estiver usando o jQuery, poderá fazer o seguinte:
Observe que retornar 1 e -1 (ou 0 e 1) da função de comparação está absolutamente errado .
fonte
A resposta da @ SolutionYogi funciona como um encanto, mas parece que o uso de $ .each é menos direto e eficiente do que os itens de lista anexados diretamente:
Violino
fonte
melhoria baseada na resposta de Jeetendra Chauhan
por que considero uma melhoria:
usando
each
para suportar a execução em mais de um ulusar em
children('li')
vez de('ul li')
é importante porque só queremos processar filhos diretos e não descendentesusar a função de seta
(a,b)=>
parece melhor (IE não suportado)usando baunilha em
innerText
vez de$(a).text()
para melhorar a velocidadeusar baunilha
localeCompare
melhora a velocidade em caso de elementos iguais (raro no uso na vida real)usar em
appendTo(this)
vez de usar outro seletor garantirá que, mesmo que o seletor capte mais de um ul, nada seja interrompidofonte
Eu estava tentando fazer isso sozinho e não estava satisfeito com nenhuma das respostas fornecidas simplesmente porque, acredito, são tempos quadráticos, e preciso fazer isso em listas com centenas de itens.
Acabei estendendo o jquery e minha solução usa o jquery, mas poderia ser facilmente modificado para usar o javascript direto.
Eu só acesso cada item duas vezes e realizo uma classificação linearitmica, portanto, acho que isso deve ser muito mais rápido em grandes conjuntos de dados, embora eu confesse livremente que poderia estar enganado:
fonte
Coloque a lista em uma matriz, use JavaScript
.sort()
, que por padrão é alfabético, depois converta a matriz novamente em uma lista.http://www.w3schools.com/jsref/jsref_sort.asp
fonte
HTML
Javascript
JSFiddle Demo https://jsfiddle.net/97oo61nw/
Aqui, pressionamos todos os valores dos
li
elementosul
com específicoid
(que fornecemos como argumento da função) paraarr
ordenar e classificar usando o método sort () , que é classificado alfabeticamente por padrão. Depois que a matrizarr
é classificada, fazemos um loop nessa matriz usando o método forEach () e apenas substituímos o conteúdo de texto de todos osli
elementos pelo conteúdo classificadofonte