Saya sedikit keluar dari kedalaman saya di sini dan saya berharap ini benar-benar mungkin.
Saya ingin dapat memanggil fungsi yang akan mengurutkan semua item dalam daftar saya berdasarkan abjad.
Saya sudah mencari-cari di jQuery UI untuk menyortir tetapi sepertinya tidak. Adakah pikiran?
javascript
jquery
dom
sorting
Shog9
sumber
sumber
Jawaban:
Anda tidak perlu jQuery untuk melakukan ini ...
Mudah digunakan...
Demo Langsung →
sumber
Sesuatu seperti ini:
Dari halaman ini: http://www.onemoretake.com/2009/02/25/sorting-elements-with-jquery/
Kode di atas akan mengurutkan daftar tidak berurutan Anda dengan id 'myUL'.
ATAU Anda dapat menggunakan plugin seperti TinySort. https://github.com/Sjeiti/TinySort
sumber
live demo: http://jsbin.com/eculis/876/edit
sumber
$(".list li").sort(function(a, b){return ($(b).text()) < ($(a).text());}).appendTo('.list');
. Satu komentar meskipun:.text()
harus.text().toUpperCase()
$(".list").children()
, jika mungkin, atau mengatur pemilih dengan hubungan anak langsung seperti$(".list > li")
Untuk membuat ini berfungsi dengan semua browser termasuk Chrome Anda harus membuat fungsi callback sort () mengembalikan -1,0 atau 1.
lihat http://inderpreetsingh.com/2010/12/01/chromes-javascript-sort-array-function-is-different-yet-proper/
sumber
Jika Anda menggunakan jQuery, Anda dapat melakukan ini:
Perhatikan bahwa mengembalikan 1 dan -1 (atau 0 dan 1) dari fungsi bandingkan benar-benar salah .
sumber
@ SolutionYogi's jawaban berfungsi seperti pesona, tetapi tampaknya menggunakan $ .each kurang mudah dan efisien daripada langsung menambahkan daftar item:
Biola
sumber
perbaikan berdasarkan jawaban Jeetendra Chauhan
mengapa saya menganggapnya sebagai peningkatan:
gunakan
each
untuk mendukung berjalan di lebih dari satu ulmenggunakan
children('li')
bukan('ul li')
penting karena kami hanya ingin memproses anak-anak langsung dan bukan keturunanmenggunakan fungsi panah
(a,b)=>
hanya terlihat lebih baik (IE tidak didukung)menggunakan vanilla
innerText
bukan$(a).text()
untuk peningkatan kecepatanmenggunakan vanila
localeCompare
meningkatkan kecepatan jika elemen yang sama (jarang digunakan dalam kehidupan nyata)menggunakan
appendTo(this)
daripada menggunakan pemilih lain akan memastikan bahwa bahkan jika pemilih menangkap lebih dari satu ul tetap tidak ada yang rusaksumber
Saya ingin melakukan ini sendiri, dan saya tidak puas dengan jawaban yang diberikan hanya karena, saya percaya, itu adalah waktu kuadratik, dan saya perlu melakukan ini pada daftar ratusan item.
Saya akhirnya memperluas jquery, dan solusi saya menggunakan jquery, tetapi dapat dengan mudah dimodifikasi untuk menggunakan javascript lurus.
Saya hanya mengakses setiap item dua kali, dan melakukan satu jenis linearitmik, jadi ini seharusnya, saya pikir, bekerja jauh lebih cepat pada kumpulan data besar, meskipun saya dengan bebas mengaku bahwa saya bisa saja salah di sana:
sumber
Letakkan daftar di dalam array, gunakan JavaScript
.sort()
, yang secara default sesuai abjad, lalu konversikan kembali ke daftar.http://www.w3schools.com/jsref/jsref_sort.asp
sumber
HTML
JavaScript
Demo JSFiddle https://jsfiddle.net/97oo61nw/
Di sini kita mendorong semua nilai
li
elemen di dalamul
dengan spesifikid
(yang kami sediakan sebagai argumen fungsi) untuk mengaturarr
dan mengurutkannya menggunakan metode sort () yang diurutkan secara alfabetis secara default. Setelah arrayarr
diurutkan kita loop array ini menggunakan metode forEach () dan hanya mengganti konten teks semuali
elemen dengan konten yang diurutkansumber