Sunday, October 6, 2013

JavaScript Table Sorter

Skrip ini bisa digunakan untuk menyortir tabel dengan tampilan yang sederhana:

JavaScript

// Original code: http://stackoverflow.com/a/14268260/1163000
// Usage: `makeSortable(elem);`
(function() {
    function sortTable(table, col, reverse) {
        var tb = table.tBodies[0], // Use `<tbody>` to ignore `<thead>` and `<tfoot>` rows
            tr = Array.prototype.slice.call(tb.rows, 0); // Put rows into array
        reverse = -((+reverse) || -1);
        tr = tr.sort(function (a, b) { // Sort rows
            return reverse * (a.cells[col].textContent.trim().localeCompare(b.cells[col].textContent.trim()));
        });
        for (var i = 0, len = tr.length; i < len; ++i) {
            tb.appendChild(tr[i]); // Append each row in order
        }
    }
    function makeSortable(table) {
        var th = table.tHead, i;
        th && (th = th.rows[0]) && (th = th.cells);
        if (th) {
            i = th.length;
        } else {
            return; // If no `<thead>` then do nothing
        }
        while (--i >= 0) (function(i) {
            var dir = 1;
            th[i].onmousedown = function() {
                for (var j = 0, jen = th.length; j < jen; ++j) {
                    th[j].className = th[j].className.replace(/(^| )desc|asc( |$)/g, "$1$2");
                }
                sortTable(table, i, (dir = 1 - dir));
                this.className += dir === 1 ? " desc" : " asc";
                return false;
            };
        }(i));
    }
    window.makeSortable = makeSortable;
})();

CSS

.table-sortable {
  border-collapse:collapse;
  table-layout:fixed;
  width:100%;
  font:normal normal 13px/1.4 Arial,Sans-Serif;
  color:black;
  background-color:white;
}

.table-sortable th,
.table-sortable td {
  margin:0;
  padding:5px 8px;
  border:none;
  vertical-align:top;
  text-align:left;
}

.table-sortable th {
  font-weight:bold;
  background-color:slategray;
  color:white;
  border-color:white;
}

.table-sortable tbody tr:nth-child(even) {background-color:whitesmoke}
.table-sortable th {cursor:pointer}

th.asc,
th.desc {background-color:lightslategray}

th.asc:before,
th.desc:before {
  content:"";
  display:block;
  float:right;
  width:0;
  height:0;
  border:.4em solid transparent;
}

th.asc:before {
  border-bottom-color:inherit;
  border-top-width:0;
  margin-top:.4em;
}

th.desc:before {
  border-top-color:inherit;
  border-bottom-width:0;
  margin-top:.5em;
}

HTML

<table class="table-sortable" id="table-1">
  <thead>
    <tr><th>Header 1</th><th>Header 2</th><th>Header 3</th></tr>
  </thead>
  <tbody>
    <!-- Sortable rows -->
    <tr><td> ... </td><td> ... </td><td> ... </td></tr>
    <tr><td> ... </td><td> ... </td><td> ... </td></tr>
    <tr><td> ... </td><td> ... </td><td> ... </td></tr>
    ...
  </tbody>
</table>
<script>makeSortable(document.getElementById('table-1'));</script>

Meski masih ada sedikit kekurangan karena fungsi sortir ini hanya memakai logika berdasarkan abjad. Coba Anda klik pada header Harga. Hasilnya tidak akan sesuai dengan apa yang kita harapkan. Masih sedang mencari solusi yang paling mudah untuk menangani satuan harga pada fungsi ini…

Demo

Lihat Demo

Labels: ,

14 Comments:

At Sunday, October 6, 2013 at 10:35:00 AM GMT+7, Blogger Unknown said...

Luar binasa kreatifitas mas tovic,,, :-bd

 
At Sunday, October 6, 2013 at 10:36:00 AM GMT+7, Blogger Taufik Nurrohman said...

??? Ini bukan skrip buatan Saya.

 
At Sunday, October 6, 2013 at 11:54:00 AM GMT+7, Blogger Unknown said...

Walaupun bukan script dari Kang Taufik, tapi terima kasih sudah memberi tahu dan menyebarluaskan....ini bisa digunakan untuk sitemap juga ya kang ?

 
At Sunday, October 6, 2013 at 1:28:00 PM GMT+7, Blogger Taufik Nurrohman said...

Bisa, selama fungsi dipicu setelah widget termuat. Saya sudah membuat contohnya di sini ⇒ http://jsfiddle.net/tovic/YtLvB/2/embedded/result,html,js,css. Baca komentar-komentarnya di dalam panel JavaScript.

Saya tidak akan memasukkan widget ini ke dalam posting baru yang lain di blog ini. Kalau ada yang mau menyalin dan berbagi kode ini tinggal klik saja tombol Fork, lalu buat tutorialnya sendiri setelah berhasil menerapkannya.

 
At Sunday, October 6, 2013 at 1:54:00 PM GMT+7, Blogger Damar Zaky said...

ikut meramaikan suasana :D

 
At Sunday, October 6, 2013 at 5:21:00 PM GMT+7, Blogger no data said...

saya juga om nyikut,
absen juga :D

 
At Sunday, October 6, 2013 at 7:51:00 PM GMT+7, Blogger test said...

wah da mas rio us juga di sini ^_^

 
At Sunday, October 6, 2013 at 8:29:00 PM GMT+7, Blogger Saeful Rahman said...

wow hebat mas Taufik, saya coba untuk menerapkannya. Makin hari makin salut aja sama DTE:].

 
At Monday, October 7, 2013 at 9:54:00 AM GMT+7, Blogger Beben Koben said...

ya, itu buata saya (kt yg buat)

 
At Tuesday, October 8, 2013 at 6:10:00 AM GMT+7, Blogger zahrotul wahyudi said...

mantaf nih infonya..nuwun mas bro..

 
At Wednesday, October 16, 2013 at 3:36:00 PM GMT+7, Blogger Pantun Simanjuntak said...

waduh gak bisa dibalikin jadi urutan yang semula

 
At Friday, October 25, 2013 at 1:44:00 AM GMT+7, Blogger kontol ajing pepek said...

bagus juga nih kalo dipakai buat daftar isi, thanks to tovic :D ahay
btw, blognya ada sisa kosong di kanan akibat width blog tidak 100% kalo monitornya widescreen pasti kelihatan

 
At Friday, November 8, 2013 at 11:08:00 PM GMT+7, Blogger Masiki said...

gan mau nanya..
Javascriptnya tuh di taruh dimana ya.??
saya taruh di atau kok ada error ya..

disini
"th && (th = th.rows[0]) && (th = th.cells);"

dan disini "j < jen; ++j)"

maaf gan kalau ganggu.

 
At Sunday, November 30, 2014 at 6:03:00 PM GMT+7, Blogger Satud said...

gan, kasih tw letak2 tempat naronya donk

 

Post a Comment

<< Home