/* Sorting table*/ /* ************************************** */ $(document).on('click','.sortable',function(){ var table = $(this).parents('table').eq(0); var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index())); var besidesSelf = $('.sortable').not($(this)); this.asc = !this.asc; if (!this.asc){ rows = rows.reverse(); $(this).removeClass('sorter'); $(this).addClass('desc'); $(this).removeClass('asc'); besidesSelf.removeClass('asc'); besidesSelf.removeClass('desc'); besidesSelf.addClass('sorter'); } else{ $(this).removeClass('sorter'); $(this).addClass('asc'); $(this).removeClass('desc'); besidesSelf.removeClass('asc'); besidesSelf.removeClass('desc'); besidesSelf.addClass('sorter'); } table.children('tbody').empty().html(rows); }); function comparer(index) { return function(a, b) { var valA = getCellValue(a, index), valB = getCellValue(b, index); return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB); }; } function getCellValue(row, index){ return $(row).children('td').eq(index).text(); }