$(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"); //初始化 });