jquery实现表格本地排序的方法


Posted in Javascript onMarch 11, 2015

本文实例讲述了jquery实现表格本地排序的方法。分享给大家供大家参考。具体实现方法如下:

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>jquery 表格排序</title>

    <style type="text/css">

        thead

        {

            background-color: Blue;

            color: White;

        }

        tr.odd

        {

            background-color: #ddd;

        }

        tr.even

        {

            background-color: #eee;

        }

        .clickable

        {

            text-decoration: underline;

        }

        .hover

        {

            background-color: #5dd354;

        }

        .sorted

        {

            background-color: #ded070;

        }

        .page-number

        {

            color: Black; 

            margin:2px 10px;

            padding:2px 5px;

        }

        .active

        {

            border:solid 1px red;

            background-color:#76a7d2;

            }

        .pager

        {

            margin-bottom:10px;

            margin-left:20px;

            }

    </style>

    <script type="text/javascript" language="javascript" src="js/jquery1.3.2.js"></script>

    <script type="text/javascript" language="javascript">

        $(function() {

            jQuery.fn.alternateRowColors = function() {                      //做成插件的形式

                $('tbody tr:odd', this).removeClass('even').addClass('odd'); //隔行变色 奇数行

                $('tbody tr:even', this).removeClass('odd').addClass('even'); //隔行变色 偶数行

                return this;

            };

            $('table.myTable').each(function() {

                var $table = $(this);                       //将table存储为一个jquery对象

                $table.alternateRowColors($table);          //在排序时隔行变色

                $('th', $table).each(function(column) {

                    var findSortKey;

                    if ($(this).is('.sort-alpha')) {       //按字母排序

                        findSortKey = function($cell) {

                            return $cell.find('sort-key').text().toUpperCase() + '' + $cell.text().toUpperCase();

                        };

                    } else if ($(this).is('.sort-numeric')) {       //按数字排序

                        findSortKey = function($cell) {

                            var key = parseFloat($cell.text().replace(/^[^\d.]*/, ''));

                            return isNaN(key) ? 0 : key;

                        };

                    } else if ($(this).is('.sort-date')) {          //按日期排序

                        findSortKey = function($cell) {

                            return Date.parse('1 ' + $cell.text());

                        };

                    }

                    if (findSortKey) {

                        $(this).addClass('clickable').hover(function() { $(this).addClass('hover'); }, function() { $(this).removeClass('hover'); }).click(function() {

                            //反向排序状态声明

                            var newDirection = 1;

                            if ($(this).is('.sorted-asc')) {

                                newDirection = -1;

                            }

                            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 (a.sortKey < b.sortKey) return -newDirection;

                                if (a.sortKey > b.sortKey) return newDirection;

                                return 0;

                            });

                            $.each(rows, function(index, row) {

                                $table.children('tbody').append(row);

                                row.sortKey = null;

                            });

                            $table.find('th').removeClass('sorted-asc').removeClass('sorted-desc');

                            var $sortHead = $table.find('th').filter(':nth-child(' + (column + 1) + ')');

                            //实现反向排序

                            if (newDirection == 1) {

                                $sortHead.addClass('sorted-asc');

                            } else {

                                $sortHead.addClass('sorted-desc');

                            }

                            //调用隔行变色的函数

                            $table.alternateRowColors($table);

                            //移除已排序的列的样式,添加样式到当前列

                            $table.find('td').removeClass('sorted').filter(':nth-child(' + (column + 1) + ')').addClass('sorted');

                            $table.trigger('repaginate');

                        });

                    }

                });

            });

        });

        //分页

        $(function() {

            $('table.paginated').each(function() {

                var currentPage = 0;

                var numPerPage = 10;

                var $table = $(this);

                $table.bind('repaginate', function() {

                    $table.find('tbody tr').hide().slice(currentPage * numPerPage, (currentPage + 1) * numPerPage).show();

                });

                var numRows = $table.find('tbody tr').length;

                var numPages = Math.ceil(numRows / numPerPage);

                var $pager = $('<div class="pager"></div>');

                for (var page = 0; page < numPages; page++) {

                    $('<span class="page-number"></span>').text(page + 1)

                     .bind('click', { newPage: page }, function(event) {

                         currentPage = event.data['newPage'];

                         $table.trigger('repaginate');

                         $(this).addClass('active').siblings().removeClass('active');

                     }).appendTo($pager).addClass('clickable');

                }

                $pager.insertBefore($table);

                $table.trigger('repaginate');

                $pager.find('span.page-number:first').addClass('active');

            });

        });

    </script>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <table class="myTable paginated">

            <thead>

                <tr>

                    <th class="sort-alpha">

                        Last Name

                    </th>

                    <th class="sort-alpha">

                        First Name

                    </th>

                    <th>

                        Email

                    </th>

                    <th class="sort-numeric">

                        Due

                    </th>

                    <th class="sort-date">

                        Date

                    </th>

                    <th>

                        Web Site

                    </th>

                </tr>

            </thead>

            <tbody>

                <tr>

                    <td>

                        tmith

                    </td>

                    <td>

                        erthn

                    </td>

                    <td>

                        eth@gmail.com

                    </td>

                    <td>

                        $34.00

                    </td>

                    <td>

                       14 2009

                    </td>

                    <td>

                        ftp://www.baidu.com

                    </td>

                </tr>

                <tr>

                    <td>

                        TTmith

                    </td>

                    <td>

                        BJohn

                    </td>

                    <td>

                        jsmith@gmail.com

                    </td>

                    <td>

                        $50.00

                    </td>

                    <td>

                        Mar 2009

                    </td>

                    <td>

                        ftp://www.baidu.com

                    </td>

                </tr>

                <tr>

                    <td>

                        CSmith

                    </td>

                    <td>

                        John

                    </td>

                    <td>

                        DDDD@gmail.com

                    </td>

                    <td>

                        $50.00

                    </td>

                    <td>

                        Mar 2009

                    </td>

                    <td>

                        https://3water.com

                    </td>

                </tr>

                <tr>

                    <td>

                        Smith

                    </td>

                    <td>

                        John

                    </td>

                    <td>

                        sdsf@gmail.com

                    </td>

                    <td>

                        $50.00

                    </td>

                    <td>

                        f32 2009

                    </td>

                    <td>

                        ffttp://3water.com

                    </td>

                </tr>

            </tbody>

        </table>

    </div>

    </form>

</body>

</html>

希望本文所述对大家的jquery程序设计有所帮助。

Javascript 相关文章推荐
浏览器无法运行JAVA脚本的解决方法
Jan 09 Javascript
关于jQuery的inArray 方法介绍
Oct 08 Javascript
javascript淡入淡出效果的实现思路
Mar 31 Javascript
js给onclick事件赋值,动态传参数实例解说
Mar 28 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
Dec 20 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
Oct 26 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
May 24 Javascript
JS锚点的设置与使用方法
Sep 05 Javascript
BACKBONE.JS 简单入门范例
Oct 17 Javascript
详解小程序rich-text对富文本支持方案
Nov 28 Javascript
基于Express框架使用POST传递Form数据
Aug 10 Javascript
Vue+Openlayers自定义轨迹动画
Sep 24 Javascript
jQuery实现渐变下拉菜单的简单方法
Mar 11 #Javascript
jQuery实现新消息闪烁标题提示的方法
Mar 11 #Javascript
javascript实现详细时间提醒信息效果的方法
Mar 11 #Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 #Javascript
JavaScript前补零操作实例
Mar 11 #Javascript
JavaScript限定图片显示大小的方法
Mar 11 #Javascript
iScroll中事件点击触发两次解决方案
Mar 11 #Javascript
You might like
ADODB的数据库封包程序库
2006/12/31 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
jQuery Ajax 仿AjaxPro.Utility.RegisterTypeForAjax辅助方法
2011/09/27 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
javascript中typeof操作符和constucor属性检测
2015/02/26 Javascript
详解参数传递四种形式
2015/07/21 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
2018/01/17 Python
python多线程分块读取文件
2019/08/29 Python
利用Python的turtle库绘制玫瑰教程
2019/11/23 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
pytorch 常用线性函数详解
2020/01/15 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
python里glob模块知识点总结
2021/01/05 Python
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
英文版银行求职信
2013/10/09 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
思想道德自我评价2015
2015/03/09 职场文书
朋友聚会开场白
2015/06/01 职场文书
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android