sortTableByIndex = function(index,type){
                var type = type||'up';
                var $bd_tbody = $table.find('tbody');
                $bd_tbody.find('td').removeClass(options.activeCls).filter(':nth-child('+(index+1)+')').addClass(options.activeCls);
                var $items = $bd_tbody.find('tr');
                var $temps = $items.clone();
                var list = $.map($items,function(item,i){
                    var $item = $(item);
                    var value = $item.find('td').eq(index).data('value')||0;
                    return {
                        'index':i,
                        'value':value
                    };
                });
                if(type=='up'){
                    list.sort(function(item1,item2){
                        if(isNaN(item1['value'])||isNaN(item2['value'])){
                            return item1['value'].toString().localeCompare(item2['value'].toString());
                        }else{
                            return item1['value']-item2['value'];
                        }
                    });
                }else{
                    list.sort(function(item1,item2){
                        if(isNaN(item1['value'])||isNaN(item2['value'])){
                            return item2['value'].toString().localeCompare(item1['value'].toString());
                        }else{
                            return item2['value']-item1['value'];
                        }
                    });
                }
                $bd_tbody.append($temps);
                $temps.each(function(index){
                    var $this = $(this);
                    var $temp = $items.eq(list[index]['index']);
                    $this.replaceWith($temp);
                });
            }
jquery.tablesort.js 1.0
http://jquerywidget.com