jQuery实现的表格前端排序功能示例


Posted in jQuery onSeptember 18, 2017

本文实例讲述了jQuery实现的表格前端排序功能。分享给大家供大家参考,具体如下:

表格前端按列排序

依赖jQuery(本例使用jQuery-1.8.2)

1.初始化方法

(function($){
  //插件
  $.extend($,{
    //命名空间
    sortTable:{
      sort:function(tableId,Idx){
        var table = document.getElementById(tableId);
        var tbody = table.tBodies[0];
        var tr = tbody.rows;
        var trValue = new Array();
        for (var i=0; i<tr.length; i++ ) {
          trValue[i] = tr[i]; //将表格中各行的信息存储在新建的数组中
        }
        if (tbody.sortCol == Idx) {
          trValue.reverse(); //如果该列已经进行排序过了,则直接对其反序排列
        } else {
          trValue.sort(function(tr1, tr2){
            var value1 = tr1.cells[Idx].innerText; //列
            var value2 = tr2.cells[Idx].innerText; //第二列
            value1 = value1.replace("%",""); //把有%的取消掉
            value1=value1.trim(); //去空格
            console.log(typeof(value1));
            if(isNaN(value1)){
              var index1 = value1.indexOf("分");
              var index2 = value2.indexOf("分");
              if(index1>0){
                var num1 =value1.substring(0,index1);
                var num2 =value1.substring(index1+1,value1.length-1);
                var num3 =value2.substring(0,index2);
                var num4 =value2.substring(index2+1,value2.length-1);
                if(parseFloat(num1)>parseFloat(num3)){
                  return 1;
                }
                if(parseFloat(num1)<parseFloat(num3)){
                  return -1;
                }
                if(parseFloat(num1)==parseFloat(num3)){
                  return parseFloat(num2)-parseFloat(num4)
                }
              }else{
                var a = tr1.cells[Idx].textContent;
                var b= tr2.cells[Idx].textContent;
                return a.localeCompare(b);
              }
            }else{
              return parseFloat(value1)-parseFloat(value2);
            }
          });
        }
        var fragment = document.createDocumentFragment(); //新建一个代码片段,用于保存排序后的结果
        //var index = 0;
        var arrtotal =new Array();
        for (var i=0; i<trValue.length; i++ ) {
          var c = trValue[i].cells[0].innerHTML;
          //console.log(c);
          if(c.trim().indexOf("汇总")!=-1){//汇总行总是排在表格最上面
          // index = i;
            arrtotal.push(i);
            }else{
          fragment.appendChild(trValue[i]);
         }
        }
        if(arrtotal.length>0){
          for(var k=arrtotal.length; k<0; k-- ){
             tbody.appendChild(trValue[arrtotal[k]]);
          }
        }
        //tbody.appendChild(trValue[index]);
        tbody.appendChild(fragment); //将排序的结果替换掉之前的值
        tbody.sortCol = Idx;
      }
    }
  });
})(jQuery);

2.页面函数

function desc_change(id,str){
   $("#desc_1").html("日期");
   $("#desc_2").html("ID");
   $("#desc_3").html("类别");
   $("#"+id).html(str);
}
function desc(id,str){
  var htmlstr =$("#"+id).text().trim();
  var c =str;
  if(htmlstr==str){
    c=str+'↓';
    $("#"+id).html(c);
  }else if(htmlstr==str+'↓'){
    c=str+'↑'
    $("#"+id).html(c);
  }else if(htmlstr==str+'↑'){
    c=str+'↓'
    $("#"+id).html(c);
  }
  desc_change(id,c)
}

3.DOM结构

<table id="tableSort">
    <thead>
    <tr>
        <th onclick="$.sortTable.sort('tableSort',0);desc('desc_1','日期')" ><a id="desc_1" >日期</a></th>
        <th onclick="$.sortTable.sort('tableSort',1);desc('desc_2','软件ID')" ><a id="desc_2" >ID</a></th>
      <th onclick="$.sortTable.sort('tableSort',2);desc('desc_x','渠道ID')" ><a id="desc_3" >类别</a></th>
    </tr>
    </thead>
    <tbody>
     <tr>
        <td>201870601</td>
        <td>汇总</td>
        <td>新闻</td>
     </tr>
    </tbody>
</table>

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

jQuery 相关文章推荐
jQuery+pjax简单示例汇总
Apr 21 jQuery
jQuery为某个div加入行样式
Jun 09 jQuery
基于jquery实现多选下拉列表
Aug 02 jQuery
jquery 一键复制到剪切板的实例
Sep 20 jQuery
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
Nov 10 jQuery
JS/jQuery实现DIV延时几秒后消失或显示的方法
Feb 12 jQuery
jQuery实现表单动态添加与删除数据操作示例
Jul 03 jQuery
jQuery超简单遮罩层实现方法示例
Sep 06 jQuery
jquery无缝图片轮播组件封装
Nov 25 jQuery
jquery将信息遍历到界面上实例代码
Jan 21 jQuery
jquery实现手风琴案例
May 04 jQuery
基于JQuery实现页面定时弹出广告
May 08 jQuery
jQuery实现对网页节点的增删改查功能示例
Sep 18 #jQuery
jQuery UI 实例讲解 - 日期选择器(Datepicker)
Sep 18 #jQuery
jQuery实现火车票买票城市选择切换功能
Sep 15 #jQuery
jQuery获取复选框选中的当前行的某个字段的值
Sep 15 #jQuery
jQuery plugin animsition使用小结
Sep 14 #jQuery
jquery 键盘事件的使用方法详解
Sep 13 #jQuery
React中jquery引用的实现方法
Sep 12 #jQuery
You might like
php分页函数
2006/07/08 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
再推荐十款免费的php开发工具
2015/11/09 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
详解javascript appendChild()的完整功能
2018/08/18 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
python多线程下信号处理程序示例
2019/05/31 Python
python dataframe NaN处理方式
2019/12/26 Python
Python同时处理多个异常的方法
2020/07/28 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
办公室经理岗位职责
2014/01/01 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android