欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-11-25 08:32:06
本文实例讲述了jquery实现的表格前端排序功能。分享给大家供大家参考,具体如下: 表格前端按列排序 依赖jquery(本例使用jquery-1.8.2) 1.初始化...

本文实例讲述了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表格(table)操作技巧汇总》、《jquery切换特效与技巧总结》、《jquery扩展技巧总结》、《jquery常用插件及用法总结》、《jquery常见经典特效汇总》及《jquery选择器用法总结

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