jQuery实现table排序

代码实现:

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 }

需要注意的两点:

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

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

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

时间: 2024-07-29 22:27:42

jQuery实现table排序的相关文章

jQuery对table排序

<script> //col对应列,cmp两数比较方法,返回值为TRUE,FALSE function sort(col, cmp) { var table = $("#test")//获取table var trs = table.find("tr");//找到所有行 var max; var index; var tmp; var arr = new Array(); for (i = 0; i < trs.length; i++) { arr

jquery 鼠标拖动排序Li或Table

1.前端页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="拖动排序Li或Table.aspx.cs" Inherits="拖动排序Li或Table" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o

js实现table排序(jQuery下的jquery.sortElements)

项目中要实现table排序的功能. 网上有非常多解决方式,非常多都基于jQuery. jquery.tablesorter.大小17KB.只是他的首页在ie10下兼容性有点问题. DataTables,大小75KB.功能强大,带分页,搜索等功能. 还有插件叫sortElements,非常小巧.仅仅有3KB.兼容性也不错.并且在Github上有818个星. 最后我选择用sortElements,实现非常easy: 1. 引入jQuery <script type="text/javascri

jQuery遍历table中的tr td并获取td中的值

jQuery遍历table中的tr td并获取td中的值 $(function(){ $("#tableId tr").find("td").each(function(){ <span style="white-space:pre"> </span> var year = $("#year").val(); var month = $("#month").val(); var da

jquery遍历table tr td内容

$("#result").find("tr").each(function () { $(this).find("td").each(function () { if ($(this).text().indexOf("惠") > 0) { var m = $(this).text().toString(); $(this).css("width", "165px"); $(this

js table排序

table排序 一.table排序解决方案: 方案一: tablesorter.js 方案二: flexigrid.js 二.Demo下载地址: 1.tablesorter.js下载地址: http://download.csdn.net/detail/zhang1096646030/8890489 2.flexigrid.js下载地址:

关于Jquery获取Table中td内的内容

$(this).children().eq(1).text()获取的是显示的值$(this).children().eq(1).html()获取的是<td></td>之间的所有内容$('.trSelected',grid).find("td").eq(7).text();获取的是选中的某行的内容 遍历表<table id="gird"..... $("#grid tr").each(function() {     

汇总常用的jQuery操作Table tr td方法

虽然现在DIV+CSS进行页的布局大行其道,但是很多地方使用table还是有很多优势,用table展示数据是比较方便的,下面汇总了jQuery操作Table tr td常用的方法,熟记这些操作技巧,下次再使用的到时候,会让你如鱼得水,提高开发效率. 1.鼠标移动行变色  $("#table1 tr").hover(function(){ $(this).children("td").addClass("hover") },function(){

jQuery实现table隔行换色和鼠标经过变色

一.隔行换色 $("tr:odd").css("background-color","#eeeeee"); $("tr:even").css("background-color","#ffffff"); 或者一行搞定: $("table tr:nth-child(odd)").css("background-color","#eeeeee