Jquery原创排序table

思路:利用交换行配合最小排序法来实现

 

1.调用方法,如sortColumn(1,1)

2.getColumnValue(1,2) 得到第一行第二列的值

3.exChangeRow(1,4) 交换第一和第四行(这个方法i必须小于j)

源码如下(适当修改即可使用):

<script language="javascript" type="text/javascript">
         var sortDirection = 'desc';
         function sortColumn(column,type) {
             var rows = $("#MyGrid tbody tr").length-2+1;
             for (var i = 2; i <= rows; i++) {
                 for (var j = 2; j <= rows; j++) {
                     if (sortDirection == 'desc') {
                         if (compareValueNew(getColumnValue(i, column),getColumnValue(j, column),type,1)) {
                             if (i < j) {
                                 exChangeRow(i, j);
                             }
                             else {
                                 exChangeRow(j, i);
                             }
                         }
                     }
                     if (sortDirection == 'asc') {
                         if (compareValueNew(getColumnValue(i, column),getColumnValue(j, column),type,2)){
                             if (i < j) {
                                 exChangeRow(i, j);
                             }
                             else {
                                 exChangeRow(j, i);
                             }
                         }
                     }
                    
                 }
             }

             if (sortDirection == 'desc') {
                 sortDirection = 'asc';
             }
             else {
                 sortDirection = 'desc';
             }
         }

         function getColumnValue(row,column)
         {
            var returnValue = $("#MyGrid tbody tr:eq("+row+") td:eq("+column+")").text();
            return returnValue;
         }

        function exChangeRow(i, j) {
             $("#MyGrid tbody tr:eq(" + j + ")").insertAfter($("#MyGrid tbody tr:eq(" + i + ")"));
             $("#MyGrid tbody tr:eq(" + i + ")").insertAfter($("#MyGrid tbody tr:eq(" + j + ")"));

         }

         function compareValueNew(value1, value2, type,direction) {
             //1 text
             if (1 == type) {
                 if (1 == direction) {
                     return value1 < value2;
                 }
                 else {
                     return value1 > value2;
                 }
             }
             //2 float
             if (2 == type) {
                 if (1 == direction) {
                     return parseFloat(value1) < parseFloat(value2);
                 }
                 else {
                     return parseFloat(value1) > parseFloat(value2);
                 }
             }
         }

    </script>

posted on 2013-02-28 10:55  kenny jiang  阅读(300)  评论(0编辑  收藏  举报