Urutkan tabel jQuery

177

Saya memiliki tabel HTML yang sangat sederhana dengan 4 kolom:

Facility Name, Phone #, City, Specialty

Saya ingin pengguna dapat mengurutkan berdasarkan Nama Fasilitas dan Kota saja.

Bagaimana saya bisa mengkode ini menggunakan jQuery?

tony noriega
sumber
Suara saya - TinyTable
redsquare

Jawaban:

152

Jika Anda ingin menghindari semua lonceng dan peluit maka boleh saya sarankan plugin sederhana inisortElements . Pemakaian:

var table = $('table');

$('.sortable th')
    .wrapInner('<span title="sort this column"/>')
    .each(function(){

        var th = $(this),
            thIndex = th.index(),
            inverse = false;

        th.click(function(){

            table.find('td').filter(function(){

                return $(this).index() === thIndex;

            }).sortElements(function(a, b){

                if( $.text([a]) == $.text([b]) )
                    return 0;

                return $.text([a]) > $.text([b]) ?
                    inverse ? -1 : 1
                    : inverse ? 1 : -1;

            }, function(){

                // parentNode is the element we want to move
                return this.parentNode; 

            });

            inverse = !inverse;

        });

    });

Dan sebuah demo. (klik tajuk kolom "kota" dan "fasilitas" untuk menyortir)

James
sumber
6
Demo rusak karena lokasi plugin telah berubah. Saya telah memotong jsfiddle untuk demo sortElements yang setidaknya berfungsi untuk saya :) @ 999 mungkin Anda dapat memperbarui jawaban Anda untuk menautkan ke demo tetap?
Jake Worrell
2
Bagaimana jika Anda memiliki beberapa tabel pada satu halaman? Saya memotong jsfiddle jsfiddle.net/CM8bT
Marc
1
Saya mendapatkan kesalahan ini Error: illegal character, htmlnya tidak persis sama, saya juga punya thead dan tboy, bisakah Anda membantu saya dengan ini?
pahnin
1
Fungsi di atas tidak akan berfungsi jika sensitivitas kasus. Dalam plugin ini 'a'! = 'A'. Ini akan berhasil jika mengubah teks menjadi huruf besar atau kecil dan kemudian centang & bandingkan. Misalnya: Alih-alih $.text([a]) == $.text([b])menggunakan $.text([a]).toUpperCase() == $.text([b]).toUpperCase()akan memperbaikinya.
NBK
1
Sebentar lagi Anda akan menemukan bahwa penyortiran bukanlah masalah khusus tabel sama sekali - ketika Anda melakukannya, inilah plug-in jQuery mungil-mungil saya yang akan mengurutkan daftar, tabel, div atau apa pun, dalam urutan naik atau turun. Saya juga menggunakannya untuk mengurutkan berdasarkan tipe data yang berbeda seperti mata uang atau tahun - cukup berikan fungsi Anda sendiri yang mengembalikan data untuk disortir. (Saya suka memisahkan fungsi-fungsi itu, dan memberi mereka nama-nama yang bermakna, untuk membangun perpustakaan kecil saya sendiri tentang "cara untuk menyortir hal-hal" yang khusus untuk solusi yang saya bangun.)
mindplay.dk
184

Saya menemukan ini, dan berpikir saya akan membuang 2 sen saya. Klik pada tajuk kolom untuk mengurutkan naik, dan lagi untuk mengurutkan turun.

  • Bekerja di Chrome, Firefox, Opera DAN IE (8)
  • Hanya menggunakan JQuery
  • Apakah pengurutan alfa dan numerik - naik dan turun

$('th').click(function(){
    var table = $(this).parents('table').eq(0)
    var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
    this.asc = !this.asc
    if (!this.asc){rows = rows.reverse()}
    for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
    return function(a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index)
        return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB)
    }
}
function getCellValue(row, index){ return $(row).children('td').eq(index).text() }
table, th, td {
    border: 1px solid black;
}
th {
    cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
    <tr><th>Country</th><th>Date</th><th>Size</th></tr>
    <tr><td>France</td><td>2001-01-01</td><td>25</td></tr>
    <tr><td><a href=#>spain</a></td><td>2005-05-05</td><td></td></tr>
    <tr><td>Lebanon</td><td>2002-02-02</td><td>-17</td></tr>
    <tr><td>Argentina</td><td>2005-04-04</td><td>100</td></tr>
    <tr><td>USA</td><td></td><td>-6</td></tr>
</table>

** Pembaruan: 2018

Nick Grealy
sumber
10
Fantastis! Perhatikan bahwa jika Anda memiliki tautan di tds, mis <a href="#">Test</a>. Pengurutan menganggap <a.... Untuk mengurutkan berdasarkan teks saja Anda perlu mengubah html()di baris terakhir ke text().
Kai Noack
1
@wubblyjuggly - apa yang sudah Anda coba? Saat ini tabel menggunakan data sel (misalnya nilai html) untuk menentukan tipe data (yaitu jumlah atau string). Karena string tanggal datang dalam banyak format, tidak praktis untuk menulis detektor tanggal umum / pengurai (Anda dapat menulis ulang comparer(..)jika Anda tahu persis format apa yang ingin Anda dukung). Sementara itu, jika Anda menggunakan yyyy-MM-dd, " string" penyortiran akan memesan data untuk Anda. misalnya jsbin.com/pugedip/1
Nick Grealy
1
Contoh ini bekerja dengan baik untuk saya di mana solusi yang dipilih tidak. Jawaban yang dipilih tidak bekerja untuk saya; Saya tidak yakin apakah itu karena saya menggunakan thead / tbody atau tidak (jsfiddle, tanpa tag ini, berhasil).
RalphTheWonderLlama
1
Terima kasih @ Jan, saya telah memasukkan saran Anda ke dalam solusi!
Nick Grealy
1
@NickGrealy Anda benar saran saya di komentar di mana tepatnya edit ditolak. Bandingkan jsfiddle.net/gn1vtcLq/2 (versi saya) dengan jsfiddle.net/0a15ky9u (versi Anda). Klik tajuk "Jenis Kelamin" beberapa kali untuk melihat Id atau Nama yang selanjutnya mengubah urutan dalam versi Anda sambil mempertahankan urutan initalnya dalam versi saya.
Markus
39

Sejauh ini, yang termudah yang saya gunakan adalah: http://datatables.net/

Sangat luar biasa sederhana ... hanya pastikan jika Anda pergi rute penggantian DOM (yaitu, membangun tabel dan membiarkan DataTables memformat ulang itu) maka pastikan untuk memformat meja Anda dengan <thead>dan <tbody>atau itu tidak akan berhasil. Itu tentang satu-satunya gotcha.

Ada juga dukungan untuk AJAX, dll. Seperti semua kode yang benar-benar bagus, juga SANGAT mudah untuk mematikannya. Anda akan terkejut apa yang mungkin Anda gunakan. Saya mulai dengan "telanjang" DataTable yang hanya mengurutkan satu bidang dan kemudian menyadari bahwa beberapa fitur benar-benar relevan dengan apa yang saya lakukan. Klien MENCINTAI fitur baru.

Poin bonus ke DataTables untuk dukungan ThemeRoller lengkap ....

Saya juga beruntung menggunakan tablesorter, tetapi tidak semudah itu, tidak cukup baik didokumentasikan, dan hanya memiliki fitur ok.

bpeterson76
sumber
4
Setuju itu adalah plugin kaya fitur yang bagus namun mungkin berlebihan dalam hal kompleksitas dan ukuran untuk apa yang dibutuhkan OP.
redsquare
2
+1 tersedia di NuGet: nuget.org/List/Packages/jquery.datatables
Frank van Eykelen
1
Saya setuju juga, datatables.net adalah penyortir tabel / paginizer / pencari terbaik di luar sana. Fitur-fiturnya yang kaya menghemat waktu saya. Saya hanya menyesali waktu yang saya habiskan untuk mencoba mengintegrasikan tablesorter2 plugin ke kode saya sebelum mencari tahu tentang datatables ...
Logan
2
Saya tahu ini adalah utas lama tetapi jawaban ini masih berlaku. Mungkin plugin termudah yang pernah saya gunakan. Butuh 5 menit untuk bangun dan menyortir meja saya. Terima kasih!
Trucktech
Sangat mudah diatur, terbaik yang pernah saya gunakan.
Rog
18

Kami baru saja mulai menggunakan alat apik ini: https://plugins.jquery.com/tablesorter/

Ada video tentang penggunaannya di: http://www.highoncoding.com/Articles/695_Sorting_GridView_Using_JQuery_TableSorter_Plug_in.aspx

    $('#tableRoster').tablesorter({
        headers: {
            0: { sorter: false },
            4: { sorter: false }
        }
    });

Dengan meja sederhana

<table id="tableRoster">
        <thead> 
                  <tr>
                    <th><input type="checkbox" class="rCheckBox" value="all" id="rAll" ></th>
                    <th>User</th>
                    <th>Verified</th>
                    <th>Recently Accessed</th>
                    <th>&nbsp;</th>
                  </tr>
        </thead>
Ravi Ram
sumber
15

Jawaban saya akan "hati-hati". Banyak add-on pengurutan tabel jQuery hanya mengurutkan apa yang Anda berikan ke browser. Dalam banyak kasus, Anda harus ingat bahwa tabel adalah kumpulan data yang dinamis, dan berpotensi mengandung zillions baris data.

Anda menyebutkan bahwa Anda hanya memiliki 4 kolom, tetapi jauh lebih penting, Anda tidak menyebutkan berapa banyak baris yang kita bicarakan di sini.

Jika Anda melewatkan 5.000 baris ke browser dari database, mengetahui bahwa tabel database aktual berisi 100.000 baris, pertanyaan saya adalah: apa gunanya membuat tabel dapat diurutkan? Untuk melakukan pengurutan yang tepat, Anda harus mengirim kueri kembali ke database, dan membiarkan database (alat yang sebenarnya dirancang untuk mengurutkan data) melakukan pengurutan untuk Anda.

Sebagai jawaban langsung atas pertanyaan Anda, add-on sortir terbaik yang pernah saya temui adalah Ingrid. Ada banyak alasan mengapa saya tidak suka add-on ini ("lonceng dan peluit yang tidak perlu ..." seperti yang Anda sebut), tetapi salah satu fitur terbaik dalam hal jenis, adalah bahwa ia menggunakan ajax, dan tidak t berasumsi bahwa Anda sudah memberikan semua data sebelum melakukan sortir.

Saya menyadari bahwa jawaban ini mungkin berlebihan (dan lebih dari 2 tahun terlambat) untuk persyaratan Anda, tetapi saya merasa terganggu ketika pengembang di bidang saya mengabaikan hal ini. Jadi saya berharap orang lain mengambilnya.

Saya merasa lebih baik sekarang.

kereta sebelum kuda
sumber
7

Ini adalah cara yang bagus untuk mengurutkan tabel:

$(document).ready(function () {
                $('th').each(function (col) {
                    $(this).hover(
                            function () {
                                $(this).addClass('focus');
                            },
                            function () {
                                $(this).removeClass('focus');
                            }
                    );
                    $(this).click(function () {
                        if ($(this).is('.asc')) {
                            $(this).removeClass('asc');
                            $(this).addClass('desc selected');
                            sortOrder = -1;
                        } else {
                            $(this).addClass('asc selected');
                            $(this).removeClass('desc');
                            sortOrder = 1;
                        }
                        $(this).siblings().removeClass('asc selected');
                        $(this).siblings().removeClass('desc selected');
                        var arrData = $('table').find('tbody >tr:has(td)').get();
                        arrData.sort(function (a, b) {
                            var val1 = $(a).children('td').eq(col).text().toUpperCase();
                            var val2 = $(b).children('td').eq(col).text().toUpperCase();
                            if ($.isNumeric(val1) && $.isNumeric(val2))
                                return sortOrder == 1 ? val1 - val2 : val2 - val1;
                            else
                                return (val1 < val2) ? -sortOrder : (val1 > val2) ? sortOrder : 0;
                        });
                        $.each(arrData, function (index, row) {
                            $('tbody').append(row);
                        });
                    });
                });
            });
            table, th, td {
            border: 1px solid black;
        }
        th {
            cursor: pointer;
        }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
        <tr><th>id</th><th>name</th><th>age</th></tr>
        <tr><td>1</td><td>Julian</td><td>31</td></tr>
        <tr><td>2</td><td>Bert</td><td>12</td></tr>
        <tr><td>3</td><td>Xavier</td><td>25</td></tr>
        <tr><td>4</td><td>Mindy</td><td>32</td></tr>
        <tr><td>5</td><td>David</td><td>40</td></tr>
    </table>

Biola dapat ditemukan di sini:
https://jsfiddle.net/e3s84Luw/

Penjelasannya dapat ditemukan di sini: https://www.learningjquery.com/2017/03/how-to-sort-html-table-using-jquery-code

Julian
sumber
Tablesorter sangat sederhana ini bekerja sangat baik dengan data tabel dinamis (php + MariaDB). Terima kasih!
Yello
6

Saya suka jawaban yang diterima ini, namun, jarang Anda mendapatkan persyaratan untuk mengurutkan html dan tidak perlu menambahkan ikon yang menunjukkan arah pengurutan. Saya mengambil contoh penggunaan terima jawaban dan memperbaikinya dengan cepat hanya dengan menambahkan bootstrap ke proyek saya, dan menambahkan kode berikut:

<div></div>

di dalam masing-masing <th>sehingga Anda memiliki tempat untuk mengatur ikon.

setIcon(this, inverse);

dari Penggunaan jawaban yang diterima, di bawah baris:

th.click(function () {

dan dengan menambahkan metode setIcon:

function setIcon(element, inverse) {

        var iconSpan = $(element).find('div');

        if (inverse == false) {
            $(iconSpan).removeClass();
            $(iconSpan).addClass('icon-white icon-arrow-up');
        } else {
            $(iconSpan).removeClass();
            $(iconSpan).addClass('icon-white icon-arrow-down');
        }
        $(element).siblings().find('div').removeClass();
    }

Ini demo . --Anda harus menjalankan demo di Firefox atau IE, atau menonaktifkan pemeriksaan tipe-MIME Chrome agar demo berfungsi. Itu tergantung pada Plugin sortElements, yang ditautkan oleh jawaban yang diterima, sebagai sumber daya eksternal. Hanya kepala!


sumber
2

@Nick Grealy jawabannya bagus, tetapi tidak memperhitungkan kemungkinan rowspanatribut dari sel header tabel (dan mungkin jawaban lain tidak melakukannya juga). Ini adalah perbaikan dari jawaban @Nick Grealy yang memperbaikinya. Berdasarkan jawaban ini juga (terima kasih @Andrew Orlov).

Saya juga mengganti $.isNumericfungsi dengan yang khusus (terima kasih @zad) agar berfungsi dengan versi jQuery yang lebih lama.

Untuk mengaktifkannya, tambahkan class="sortable"ke <table>tag.

$(document).ready(function() {

    $('table.sortable th').click(function(){
        var table = $(this).parents('table').eq(0);
        var column_index = get_column_index(this);
        var rows = table.find('tbody tr').toArray().sort(comparer(column_index));
        this.asc = !this.asc;
        if (!this.asc){rows = rows.reverse()};
        for (var i = 0; i < rows.length; i++){table.append(rows[i])};
    })

});

function comparer(index) {
    return function(a, b) {
        var valA = getCellValue(a, index), valB = getCellValue(b, index);
        return isNumber(valA) && isNumber(valB) ? valA - valB : valA.localeCompare(valB);
    }
}
function getCellValue(row, index){ return $(row).children('td').eq(index).html() };

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

function get_column_index(element) {
    var clickedEl = $(element);
    var myCol = clickedEl.closest("th").index();
    var myRow = clickedEl.closest("tr").index();
    var rowspans = $("th[rowspan]");
    rowspans.each(function () {
        var rs = $(this);
        var rsIndex = rs.closest("tr").index();
        var rsQuantity = parseInt(rs.attr("rowspan"));
        if (myRow > rsIndex && myRow <= rsIndex + rsQuantity - 1) {
            myCol++;
        }
    });
    // alert('Row: ' + myRow + ', Column: ' + myCol);
    return myCol;
};
Dennis Golomazov
sumber
Bagaimana jika Anda menyortir berdasarkan tanggal?
wubblyjuggly
@wubblyjuggly Anda dapat mengganti fungsi pembanding dengan yang membandingkan tanggal, lihat misalnya stackoverflow.com/questions/10636779/jquery-date-sorting
Dennis Golomazov
1
Bravo, saya telah mencoba puluhan penyortir, milik Anda adalah satu-satunya yang bekerja untuk saya. BTW teman kencan saya dalam format teks (2020.02.23), jadi itu bukan masalah bagi saya
Manny Ramirez
2

Anda dapat menggunakan plugin jQuery ( breedjs ) yang menyediakan sortir, filter, dan pagination:

HTML:

<table>
  <thead>
    <tr>
      <th sort='name'>Name</th>
      <th>Phone</th>
      <th sort='city'>City</th>
      <th>Speciality</th>
    </tr>
  </thead>
  <tbody>
    <tr b-scope="people" b-loop="person in people">
      <td b-sort="name">{{person.name}}</td>
      <td>{{person.phone}}</td>
      <td b-sort="city">{{person.city}}</td>
      <td>{{person.speciality}}</td>
    </tr>
  </tbody>
</table>

JS:

$(function(){
  var data = {
    people: [
      {name: 'c', phone: 123, city: 'b', speciality: 'a'},
      {name: 'b', phone: 345, city: 'a', speciality: 'c'},
      {name: 'a', phone: 234, city: 'c', speciality: 'b'},
    ]
  };
  breed.run({
    scope: 'people',
    input: data
  });
  $("th[sort]").click(function(){
    breed.sort({
      scope: 'people',
      selector: $(this).attr('sort')
    });
  });
});

Contoh kerja pada biola

João Paulo
sumber
2

Yang ini tidak menutup browser, mudah dikonfigurasi lebih lanjut:

var table = $('table');

$('th.sortable').click(function(){
    var table = $(this).parents('table').eq(0);
    var ths = table.find('tr:gt(0)').toArray().sort(compare($(this).index()));
    this.asc = !this.asc;
    if (!this.asc)
       ths = ths.reverse();
    for (var i = 0; i < ths.length; i++)
       table.append(ths[i]);
});

function compare(idx) {
    return function(a, b) {
       var A = tableCell(a, idx), B = tableCell(b, idx)
       return $.isNumeric(A) && $.isNumeric(B) ? 
          A - B : A.toString().localeCompare(B)
    }
}

function tableCell(tr, index){ 
    return $(tr).children('td').eq(index).text() 
}
rapttor
sumber
1
Ini sepertinya solusi terbaik. Itu tidak memerlukan plugin. Baris pertama yang dapat Anda hapus, lalu dalam dokumen Anda siap tempel blok $ ('th.sortable'). Klik (...). Berikan header tabel kelas yang bisa diurutkan dan Anda selesai. <th class = 'sortable> title </th>. Bekerja menawan untuk kolom dengan teks atau angka.
pizzamonster
1

Untuk respons James, saya hanya akan mengubah fungsi penyortiran agar lebih universal. Dengan cara ini akan mengurutkan teks alfabet dan angka seperti angka.

if( $.text([a]) == $.text([b]) )
    return 0;
if(isNaN($.text([a])) && isNaN($.text([b]))){
    return $.text([a]) > $.text([b]) ? 
       inverse ? -1 : 1
       : inverse ? 1 : -1;
}
else{
    return parseInt($.text([a])) > parseInt($.text([b])) ? 
      inverse ? -1 : 1
      : inverse ? 1 : -1;
}
Kaloyan Iliev
sumber
1

Pendekatan lain untuk mengurutkan tabel HTML. (berdasarkan W3.JS HTML Sort )

/* Facility Name */
$('#bioTable th:eq(0)').addClass("control-label pointer");
/* Phone # */
$('#bioTable th:eq(1)').addClass("not-allowed");
/* City */
$('#bioTable th:eq(2)').addClass("control-label pointer");
/* Specialty */
$('#bioTable th:eq(3)').addClass("not-allowed");


var collection = [{
  "FacilityName": "MinION",
  "Phone": "999-8888",
  "City": "France",
  "Specialty": "Genetic Prediction"
}, {
  "FacilityName": "GridION X5",
  "Phone": "999-8812",
  "City": "Singapore",
  "Specialty": "DNA Assembly"
}, {
  "FacilityName": "PromethION",
  "Phone": "929-8888",
  "City": "San Francisco",
  "Specialty": "DNA Testing"
}, {
  "FacilityName": "iSeq 100 System",
  "Phone": "999-8008",
  "City": "Christchurch",
  "Specialty": "gDNA-mRNA sequencing"
}]

$tbody = $("#bioTable").append('<tbody></tbody>');

for (var i = 0; i < collection.length; i++) {
  $tbody = $tbody.append('<tr class="item"><td>' + collection[i]["FacilityName"] + '</td><td>' + collection[i]["Phone"] + '</td><td>' + collection[i]["City"] + '</td><td>' + collection[i]["Specialty"] + '</td></tr>');
}
.control-label:after {
  content: "*";
  color: red;
}

.pointer {
  cursor: pointer;
}

.not-allowed {
  cursor: not-allowed;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://www.w3schools.com/lib/w3.js"></script>
<link href="https://www.w3schools.com/w3css/4/w3.css" rel="stylesheet" />
<p>Click the <strong>table headers</strong> to sort the table accordingly:</p>

<table id="bioTable" class="w3-table-all">
  <thead>
    <tr>
      <th onclick="w3.sortHTML('#bioTable', '.item', 'td:nth-child(1)')">Facility Name</th>
      <th>Phone #</th>
      <th onclick="w3.sortHTML('#bioTable', '.item', 'td:nth-child(3)')">City</th>
      <th>Specialty</th>
    </tr>
  </thead>
</table>

Penny Liu
sumber
1

Saya akhirnya menggunakan jawaban Nick (yang paling populer tetapi tidak diterima) https://stackoverflow.com/a/19947532/5271220

dan dikombinasikan dengan https://stackoverflow.com/a/16819442/5271220 tetapi tidak ingin menambahkan ikon atau fontawesome ke proyek. Gaya CSS untuk sort-kolom-asc / desc saya lakukan warna, padding, batas bulat.

Saya juga memodifikasinya untuk naik kelas bukan oleh yang lain sehingga kita bisa mengontrol mana yang bisa diurutkan. Ini juga bisa berguna nanti jika ada dua tabel meskipun modifikasi lebih lanjut perlu dilakukan untuk itu.

tubuh:

 html += "<thead>\n";
    html += "<th></th>\n";
    html += "<th class=\"sort-header\">Name <span></span></i></th>\n";
    html += "<th class=\"sort-header\">Status <span></span></th>\n";
    html += "<th class=\"sort-header\">Comments <span></span></th>\n";
    html += "<th class=\"sort-header\">Location <span></span></th>\n";
    html += "<th nowrap class=\"sort-header\">Est. return <span></span></th>\n";
    html += "</thead>\n";
    html += "<tbody>\n"; ...

... lebih jauh ke bawah tubuh

$("body").on("click", ".sort-header", function (e) {
    var table = $(this).parents('table').eq(0)
    var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
    this.asc = !this.asc
    if (!this.asc) { rows = rows.reverse() }
    for (var i = 0; i < rows.length; i++) { table.append(rows[i]) }

    setIcon(e.target, this.asc);
});

fungsi:

function comparer(index) {
        return function (a, b) {
            var valA = getCellValue(a, index), valB = getCellValue(b, index)
            return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB)
        }
    }

    function getCellValue(row, index) {
        return $(row).children('td').eq(index).text()
    }

    function setIcon(element, inverse) {

        var iconSpan = $(element).find('span');

        if (inverse == true) {
            $(iconSpan).removeClass();
            $(iconSpan).addClass('sort-column-asc');
            $(iconSpan)[0].innerHTML = " &#8593 " // arrow up
        } else {
            $(iconSpan).removeClass();
            $(iconSpan).addClass('sort-column-desc');
            $(iconSpan)[0].innerHTML = " &#8595 " // arrow down 
        }

        $(element).siblings().find('span').each(function (i, obj) {
            $(obj).removeClass();
            obj.innerHTML = "";
        });
    }
Skwirl buta
sumber
-4

Suara saya! jquery.sortElements.js dan jquery sederhana
Sangat sederhana, sangat mudah, terima kasih nandhp ...

            $('th').live('click', function(){

            var th = $(this), thIndex = th.index(), var table = $(this).parent().parent();

                switch($(this).attr('inverse')){
                case 'false': inverse = true; break;
                case 'true:': inverse = false; break;
                default: inverse = false; break;
                }
            th.attr('inverse',inverse)

            table.find('td').filter(function(){
                return $(this).index() === thIndex;
            }).sortElements(function(a, b){
                return $.text([a]) > $.text([b]) ?
                    inverse ? -1 : 1
                    : inverse ? 1 : -1;
            }, function(){
                // parentNode is the element we want to move
                return this.parentNode; 
            });
            inverse = !inverse;     
            });

Dei uma melhorada do código
Satu cod lebih baik! Berfungsi untuk Semua tabel di semua Th di sepanjang waktu ... Lihat!
DEMO

Filipe Rudá
sumber
3
Selain tidak bisa mengerti sepatah kata pun, saya akan sangat menyarankan menentang .live().
Menjelma