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插件Echarts实现的渐变色柱状图
Mar 23 jQuery
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
jQuery事件对象的属性和方法详解
Sep 09 jQuery
jquery如何实现点击空白处隐藏元素
Dec 05 jQuery
用jquery获取select标签中选中的option值及文本的示例
Jan 25 jQuery
js与jQuery实现获取table中的数据并拼成json字符串操作示例
Jul 12 jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
使用jquery的cookie实现登录页记住用户名和密码的方法
Mar 13 jQuery
通过jQuery学习js类型判断的技巧
May 27 jQuery
jquery分页优化操作实例分析
Aug 23 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 多行多列显示
2009/08/15 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
异步加载script的代码
2011/01/12 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
对javascript继承的理解
2016/10/11 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python新手经常遇到的17个错误分析
2014/07/30 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
python logging设置level失败的解决方法
2020/02/19 Python
利用Python脚本批量生成SQL语句
2020/03/04 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
python的flask框架难学吗
2020/07/31 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
绩效考核实施方案
2014/03/18 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书