jquery 實現表格排序

來源:互聯網
上載者:User
$(document).ready(function(){        //外掛程式的形式    jQuery.fn.alterRowColors = function()    {        $('tbody tr:odd', this).removeClass('even').addClass('odd');        $('tbody tr:even', this).removeClass('odd').addClass('even');        return this;    }    //1.此時的函數是作為jQuery.fn的一個新屬性定義的,不是孤立的函數,這樣就把該函數註冊成了一個外掛程式,    //2.使用關鍵字this,在一個外掛程式內部,this表示的是調用該外掛程式的jQuery對象,    //3.最後在函數的末尾返回this,返回這個值可以使這個新方法能夠繼續連綴其他的方法。        var $sortOrder = 0;   //排序類型 1表示升序,0表示降序    var $table = $('table#shop');    $table.alterRowColors();    $('th', $table).each(function( column )    {        //處理三種有可能存在的排序欄位,比較方法        var findSortKey;        if( $(this).is('.sort-title') || $(this).is('.sort-author') )        {            findSortKey = function( $cell )            {                return $cell.find('.sort-title').text().toUpperCase()+ '' +$cell.text().toUpperCase();            }        }        else if( $(this).is('.sort-date') )        {            findSortKey = function( $cell )            {                return Date.parse('1' + $cell.text());            }        }        else if( $(this).is('.sort-price') )        {            findSortKey = function( $cell )            {                var key =  parseFloat($cell.text().replace(/^[^/d.]*/, ''))                return isNaN(key) ? 0 : key;            }        }                //排序        if( findSortKey )        {            $(this).addClass('clickable').hover(function()            {                $(this).addClass('hover');                var $title = $sortOrder == 0 ? '升序' : '降序';                $(this).attr('title', '按'+  $(this).html() + $title +'排列');            }, function()            {                $(this).removeClass('hover');            }).click(function()            {                $sortOrder = $sortOrder == 0 ? 1 : 0;                                var rows = $table.find('tbody > tr').get();                               $.each( rows, function( index, row )                {                    row.sortKey = findSortKey($(row).children('td').eq(column));                });                //排序方法                rows.sort(function( a, b )                {                    if( $sortOrder == 1 )                    {                        //升序                        if(a.sortKey < b.sortKey)   return -1;                        if(a.sortKey > b.sortKey)   return  1;                                            return 0;                    }                    else                    {                        //降序                        if(a.sortKey < b.sortKey)   return  1;                        if(a.sortKey > b.sortKey)   return -1;                                            return 0;                    }                                    });                //排序後的對象添加給$table                $.each( rows, function( index, row )                {                    $table.children('tbody').append(row);                    row.sortKey = null;                });                                //顯著標明是通過某一列排序的                $table.find('td').removeClass('sorted')                    .filter(':nth-child('+ (column + 1) +')').addClass('sorted');                                    //重新賦予奇偶行的樣式                $table.alterRowColors();            });        }      });        //分頁效果    var currentPage = 0;  //當前頁    var pageSize = 10;  //每頁行數(不包括表頭)    //綁定分頁事件    $table.bind('repaginate', function()    {        $table.find('tbody tr').hide()            .slice(currentPage * pageSize, (currentPage + 1) * pageSize).show();    });    var numRows = $table.find('tbody tr').length;  //記錄宗條數    var numPages = Math.ceil(numRows/pageSize);    //總頁數        var $pager = $('<div class="page"></div>');  //分頁div    for( var page = 0; page < numPages; page++ )    {        //為分頁標籤加上連結        $('<a href="#" ><span>'+ (page+1) +'</span></a>')            .bind("click", { "newPage": page }, function(event)             {                           currentPage = event.data["newPage"];                                  $table.trigger("repaginate");                         })           .appendTo($pager);                  $pager.append("  ");    }    $pager.insertAfter($table);    //分頁div插入table        $table.trigger("repaginate");  //初始化        }); 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.