码迷,mamicode.com
首页 > 编程语言 > 详细

jQuery实现table排序

时间:2015-11-19 18:14:14      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:

代码实现:

html:

 1 <div class="wrap">
 2 <table class="table sortTable">
 3     <thead>
 4         <tr>
 5             <th class="sortable" data-sort=‘number‘>序号</th>
 6             <th class="sortable" data-sort=‘string‘>姓名</th>
 7             <th class="sortable" data-sort=‘number‘>身高</th>
 8             <th class="sortable" data-sort=‘date‘>生日</th>
 9         </tr>
10     </thead>
11     <tbody>
12         <tr>
13             <td>01</td>
14             <td>Kevin</td>
15             <td>180</td>
16             <td>1991-10-01</td>
17         </tr>
18         <tr>
19             <td>02</td>
20             <td>Amy</td>
21             <td>165</td>
22             <td>1992-01-01</td>
23         </tr>
24         <tr>
25             <td>03</td>
26             <td>Tom</td>
27             <td>176</td>
28             <td>1990-01-01</td>
29         </tr>
30         <tr>
31             <td>04</td>
32             <td>Jack</td>
33             <td>182</td>
34             <td>1990-05-01</td>
35         </tr>
36         <tr>
37             <td>05</td>
38             <td>Kobe</td>
39             <td>172</td>
40             <td>1990-02-01</td>
41         </tr>
42     </tbody>
43 </table>
44 </div>
45 <script src="jquery.min.js"></script>
46 <script src="index.js"></script>
47 <script>
48 $(function(){
49     new TableSort({
50         // 测试回调函数的执行
51         callback:function(){console.log(callback!)}
52     })
53 });
54 </script>

css:

1 .wrap{width:500px;margin:20px auto;font-family:‘微软雅黑‘;}
2 .table{width:100%;}
3 .table th{font-weight:bold;}
4 .table th,.table td{padding:10px;vertical-align:top;text-align:center;}
5 .table td{border-top:1px solid #ccc;}
6 .table .sortable{cursor:pointer;}
7 .table .st-active{background:#ccc;color:#fff;border-radius:3px;}

jQuery:( index.js )

技术分享
 1 function TableSort(options){
 2     this.config = {
 3         ‘table‘  :  ‘.table‘,        // table标签的类名
 4         ‘sortClass‘  :  ‘.sortable‘, // 需排列的table的列的类名
 5         ‘callback‘  :  null          // 回调函数
 6     };
 7     this.cache = {
 8         trArrs  :  [],  // 存放tbody的所有tr的缓冲区
 9     };
10     this._init(options);
11 }
12 TableSort.prototype = {
13     constructor : TableSort,
14     _init : function(options){
15         var _self = this;
16         var config = $.extend(_self.config , options||{});
17         // 将tbody的所有tr存放到这个数组中(缓冲区),对表格排序实际上就是对这个数组中的所有tr对象排序
18         for(var i = 0;i < $(‘tbody tr‘).length;i++){
19             _self.cache.trArrs.push($(‘tbody tr‘).eq(i));
20         }
21         $.each($(config.sortClass),function(i,val){
22             $(val).off(‘click‘);
23             $(val).on(‘click‘,function(){
24                 var _this = $(this);
25                 var _parent = $(this).parent().parent().parent().find(‘tbody‘);
26                 _self._active(_this);
27                 _self._reverse(_this,‘reverse‘);
28                 _self._sortMain(_this, _parent, i);
29             });
30         });
31     },
32     _active : function(obj){
33         obj.siblings().removeClass(‘st-active‘);
34         obj.addClass(‘st-active‘);
35     },
36     _reverse : function(obj,className){
37         if(obj.hasClass(className)){
38             obj.removeClass(className);
39         }else{
40             obj.addClass(className);
41         }
42     },
43     _sortMain : function(self,parent,index){
44         var sortType = self.data(‘sort‘);
45         var trArrs = this.cache.trArrs;
46         var callback = this.config.callback;
47         if(sortType == ‘number‘){
48         // 数字类型排序
49             trArrs.sort(function(a,b){
50                 if(self.hasClass(‘reverse‘)){
51                     return a.find(‘td‘).eq(index).html() - b.find(‘td‘).eq(index).html();
52                 }else{
53                     return b.find(‘td‘).eq(index).html() - a.find(‘td‘).eq(index).html();
54                 }
55             });
56         }else if(sortType == ‘string‘){
57         // 字母类型排序
58             trArrs.sort(function(a,b){
59                 if(self.hasClass(‘reverse‘)){
60                     return a.find(‘td‘).eq(index).html().localeCompare(b.find(‘td‘).eq(index).html());
61                 }else{
62                     return b.find(‘td‘).eq(index).html().localeCompare(a.find(‘td‘).eq(index).html());
63                 }
64             });
65         }else if(sortType == ‘date‘){
66         // 日期类型排序
67             trArrs.sort(function(a,b){
68                 if(self.hasClass(‘reverse‘)){
69                     return Date.parse(b.find(‘td‘).eq(index).html().replace(/-/g,‘/‘)) - Date.parse(a.find(‘td‘).eq(index).html().replace(/-/g,‘/‘));
70                 }else{
71                     return Date.parse(a.find(‘td‘).eq(index).html().replace(/-/g,‘/‘)) - Date.parse(b.find(‘td‘).eq(index).html().replace(/-/g,‘/‘));
72                 }
73             });
74         }
75         // 数组排好序之后再append到tbody下
76         for(var i = 0;i < trArrs.length;i++){
77             parent.append(trArrs[i]);
78         }
79         // 回调函数判断与执行
80         callback && $.isFunction(callback) && callback();
81     }
82 }
View Code

 

需要注意的两点:

1、此处排序需要我们能深刻理解javascript的sort()方法和localeCompare()方法等

2、jQuery的append()方法 - 追加一个 jQuery 对象:该方法将把节点 newchild 添加到文档中,使它成为当前节点的最后一个子节点。如果文档树中已经存在了 newchild,它将从文档树中删除,然后重新插入它的新位置。

网上参考:http://www.cnblogs.com/tugenhua0707/p/3496596.html

 

jQuery实现table排序

标签:

原文地址:http://www.cnblogs.com/k11590823/p/4978008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!