datatable 多字段 排序;

没有找到datatable的排序方面运用案例,根据接口,自己实现 所以记录一二,小伙伴们有更好的方法,欢迎讨论

1、需求图

  

 2、需求

1)默认是灰色

2)第一次点击 :启动排序,图片降序变红

3)第二次点击:升序

4)第三次点击;关闭排序,即恢复默认

3、实现

  1)尝试在一个div中通过 class来控制,可是在实现恢复默认时,出现混乱

2)改变想法,通过2层div来控制:第一层:控制开启;第二层:控制切换升降序

3)出现问题:第二层点击事件会有冒泡现象,使用方法:renturn false;e.stopPropagation();均不能奏效,可能是我写的是函数而不是 click区域控制

4)加上这一句就好 onClick="event.cancelBubble = true"  出处 http://blog.csdn.net/jimmy609/article/details/53487506

4、代码 

  1)、css

1 .orderType{width:9px;height:12px;display:inline-block;background:url(‘../pc/images/archives/order_default.png‘) no-repeat center center;
2 margin-left: 2px;position:relative;top:2px;}
3 .order{width:9px;height:12px;display:none;background:url(‘../pc/images/archives/order_desc.png‘) no-repeat center center;}
4 .orderActive .order{display:inline-block;}

  2)、html 

 1 <table id="groupList" class="table table-striped text-left table60" style="width:100%;">
 2                         <thead>
 3                         <tr>
 4                             <th>序号</th>
 5                             <th>班级名称
 6                                 <span class="orderType"   onclick="orderChange(this)">
 7                                     <span class="order" data-orderField ="groupName" data-orderType="desc" onclick="orderUP(this)"></span>
 8                                 </span>
 9                             </th>
10                             <th>课程名称
11                                 <span class="orderType"  onclick="orderChange(this)">
12                                     <span class="order" data-orderField ="courseName" data-orderType="desc" onclick="orderUP(this)"></span>
13                                 </span>
14                             </th>
15                             <th>上课时间</th>
16                             <th>上课老师</th>
17                             <th>总课时
18                                 <span class="orderType"  onclick="orderChange(this)">
19                                     <span class="order" data-orderField ="courseCount" data-orderType="desc" onclick="orderUP(this)"></span>
20                                 </span>
21                             </th>
22                             <th>未上课时
23                                 <span class="orderType"  onclick="orderChange(this)">
24                                     <span class="order" data-orderField ="leftCount" data-orderType="desc" onclick="orderUP(this)"></span>
25                                 </span>
26                             </th>
27                             <th>班级状态</th>
28                             <th>班级人数
29                                 <span class="orderType"   onclick="orderChange(this)">
30                                     <span class="order" data-orderField ="memberCount" data-orderType="desc" onclick="orderUP(this)"></span>
31                                 </span>
32                             </th>
33                             <th>操作</th>
34                         </tr>
35                         </thead>
36                         <tbody>
37
38                         </tbody>
39                     </table>

3)、js

 1 function orderChange(obj){
 2     $(obj).parents().find(".orderType").removeClass("orderActive");//删除所有active
 3     $(obj).addClass("orderActive");//当前元素添加active(意味着子元素显示)
 4     $(obj).css("background","none");//当前元素隐藏(去掉背景)
 5     //表格刷新
 6     var table = $(‘#groupList‘).DataTable();
 7     table.ajax.reload();
 8 }
 9
10 function orderUP(obj){
11     event.cancelBubble = true;//阻止冒泡
12     var orderType = $(obj).attr("data-orderType")
13     if(orderType=="asc"){//点击升序时回到初始状态
14         $(obj).attr("data-orderType","desc");
15         $(obj).css({"transform":"rotate(0deg)"});
16         $(obj).parent().removeClass("orderActive");
17         $(obj).parent().css("background","url(‘../pc/images/archives/order_default.png‘) no-repeat center center");
18         //表格刷新
19         var table = $(‘#groupList‘).DataTable();
20         table.ajax.reload();
21     }else if(orderType=="desc"){
22         $(obj).attr("data-orderType","asc");
23         $(obj).css({"transform":"rotate(180deg)"});
24         //表格刷新
25         var table = $(‘#groupList‘).DataTable();
26         table.ajax.reload();
27     }
28 }

以上就实现了//////////////////////////////////

 顺便贴一下表格js

function completeData(){
    var majorCode = $(‘#majorCode‘).val();
    $showContent = $("#groupList");
    var $dataTables = $showContent.dataTable( {
        language: lang,
        //"scrollY": "600px",
        "dom": ‘<"top"i>rt<"bottom"flp><"clear">‘,
        serverSide :true,
        "bDestroy": true,
        ‘bStateSave‘: true,
        ajax:api.selectGroupClassList,
        "paging": true,
        "info": false,
        "searching": false,
        "ordering":  false,
        "responsive": true,
        "bServerSide":true,
        "sServerMethod": "POST",
        "sAjaxDataProp":"groupCourseDetails",
        "fnServerParams": function (aoData) {
           aoData["pageNum"] = this.api().page() + 1;
           aoData["pageSize"] = aoData.length;
           aoData["addressId"] = storageAddressId;
           aoData["majorCode"] = majorCode;
           aoData["token"] = token;
           aoData["orderField"] = $(".orderActive .order").attr("data-orderField");
           aoData["orderType"] = $(".orderActive .order").attr("data-orderType");
           delete aoData.draw;
           delete aoData.length;
           //delete aoData.columns;
           delete aoData.search;
           delete aoData.order;
           delete aoData.start;
        },
        "columns": [
            {
                "sWidth":"7%",
                data : null,
                bSortable : false,
                targets : 0,
                render : function(data, type, row, meta) {
                // 显示行号
                    var startIndex = meta.settings._iDisplayStart;
                    return startIndex + meta.row + 1;
                }
            },
            { "data": "groupName" },
            { "data": "courseName" },
            { "data": "startTime" },
            { "data": "teacherName" },
            { "data": "courseCount" },
            { "data": "leftCount" },
            { "data": "satus" },
            { "data": "memberCount" },
            { "data": "remove" }
        ],
        columnDefs : [
             {    "sWidth":"6%",
                searchable: false,
                orderable: false,
                targets: 0
            },
            {
                "sWidth":"10%",
                targets : 1
            },
            {
                "sWidth":"8%",
                targets : 2
            },
            {
                "sWidth":"10%",
                targets : 3,
                render :function(data, type, row, meta){
                    var courseTemplateList = row.courseTemplateList;
                    var str=‘‘;
                    if(courseTemplateList.length>0){
                        for(var i=0;i<courseTemplateList.length;i++){
                            var startTime = courseTemplateList[i].startTime;
                            var weekDay = "周" + "日一二三四五六".charAt(courseTemplateList[i].weekDay);
                            str+=‘<p>‘+weekDay+startTime+‘</p>‘;
                        }
                    }
                    return str;
                }
            },
            {
                "sWidth":"10%",
                targets : 4,
                render :function(data, type, row, meta){
                    var courseTemplateList = row.courseTemplateList;
                    var str=‘‘;
                    if(courseTemplateList.length>0){
                        for(var i=0;i<courseTemplateList.length;i++){
                            var teacherName = courseTemplateList[i].teacherName;
                            str+=‘<p>‘+teacherName+‘</p>‘;
                        }
                    }
                    return str;
                }

            },
              {
                "sWidth":"8%",
                  targets: 5
            },
              {
                  "sWidth":"8%",
                  targets: 6
              },
              {    "sWidth":"10%",
                   targets: 7,
                   render: function(data, type, row, meta) {
                      var status = row.satus== ‘1‘?‘开班中‘:‘已结班‘;
                      return status;
                   }
              },
              {    "sWidth":"8%",
                  targets: 8
              },
              {    "sWidth":"20%",
                  targets: 9,
                  render: function(data, type, row, meta){
                      var groupId = row.id;
                      var status = row.satus;
                      if(status=="1"){
                          var courseCount = row.courseCount;
                          var a = ‘‘;
                          if(courseCount>0){
                              a = ‘<a href="#myModalclasstime" style="color:#007aff;white-space: nowrap;" data="‘+groupId+‘"  data-toggle="modal">查看上课时间</a>‘;
                          }else{
                              a=‘‘;
                          }

                          var span1 = ‘<span class="replaceBlue" onclick="removeGroup(‘+groupId+‘)" style="cursor: pointer">课时管理</span>‘;
                          var span2 = ‘<span class="replaceBlue" onclick="removeGroup(‘+groupId+‘)" style="cursor: pointer">成员管理</span>‘;
                          var span3 = ‘<span class="replaceBlue" data-target="#myModalClassNew" data-toggle="modal" style="cursor: pointer">新增排课</span>‘;
                          var deleteSpan = ‘<span class="replaceBlue" onclick="removeGroup(‘+groupId+‘)" style="cursor: pointer">结班</span>‘;

                          return span1+span2+span3+deleteSpan ;
                      }
                      else if(status=="0"){
                          var span1 = ‘<span class="replaceBlue" onclick="removeGroup(‘+groupId+‘)" style="cursor: pointer">查看课时</span>‘;
                          var span2 = ‘<span class="replaceBlue" onclick="removeGroup(‘+groupId+‘)" style="cursor: pointer">重新开班</span>‘;
                          return span1+span2;
                      }

                  }
              }
        ]
    });
    $dataTables.on(‘xhr.dt‘, function ( e, settings, json, xhr ) {
          if ( json.success ) {
               json = json["body"];
               return json;
              }
    });
    //.draw();
    $.data($("#groupList")[0],"dataTables", $dataTables);
}

原文地址:https://www.cnblogs.com/roxanneQQyxm/p/8480418.html

时间: 2024-11-15 06:04:18

datatable 多字段 排序;的相关文章

php 数组排序以及按照某个字段排序

经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用.PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序.在这篇文章中我们将讨论该排序中最重要的几个函数. 简单排序 首先,让我们来看看最简单的情况:将一个数组元素从低到高进行简单排序,这个函数既可以按数字大小排列也可以按字母顺序排列.PHP的sort()函数实现了这个功能,如Listing A所示: Listing A <?php  $data = a

PHP 二维数组根据某个字段排序

原文:PHP 二维数组根据某个字段排序 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条. 遇到这个要求的时候就不是 ORDER BY 能解决的问题了.因此翻看 PHP 手册查找到了如下方法,做此笔记. <?php /** * 二维数组根据某个字段排序 * 功能:按照用户的年龄倒序排序 * @author ruxing.li */ header('Content-Type:text/html;Charset=utf-8'

字符串排序和多字段排序(string sorting and multi-fields)

被分词的string字段也是一个multi-value字段,但是对他们进行排序往往得不到想要的结果.如果你对"fine old art"进行分词,他将会返回三个term.我们也许对以一个term进行字母排序,然后第二个等.但是ES没有在这个期间的时间顺序. 你可以使用min和max排序模式(默认使用min),但是结果既不是art或者old也不是任何想要的结果. 为了对string field进行排序,这个field就只能是一个term:也就是一个not_analyzed类型的strin

SQL 单表分页存储过程和单表多字段排序和任意字段分页存储过程

  第一种:单表多字段排序分页存储过程       --支持单表多字段查询,多字段排序 create PROCEDURE [dbo].[UP_GetByPageFiledOrder] ( @TableName varchar(50), --表名 @ReFieldsStr varchar(200) = '*', --字段名(全部字段为*) @OrderString varchar(200), --排序字段(必须!支持多字段不用加order by) @WhereString varchar(500)

【HOW】如何对Reporting Services表格中数据按字段排序

Reporting Services中可以设置排序的地方非常多,有很多地方从其字面意思上好像是对表格数据的排序,但实际都不管用.在多次尝试后,得到如下的有效设置方式: 1. 鼠标右键单击要排序字段的内容单元格(不是标题单元格). 2. 在弹出菜单中选择:行组 > 组属性. 3. 在弹出窗口中选择"排序"选项卡,并在右侧界面中添加排序依据. 有时,在完成如上设置后仍未看到正确排序,这可能是因为对应数据集的排序规则(类似字符集)不正确,设置方法如下: 1. 在表格对应的数据集名称上右

vim 按照字段排序文件

假设有如下数据,以空格为数据列分割: 1  何维川   124.63     172  0.72 2  张子寅   99.67      172  0.58 3  周广滨   93.34      188  0.50 4  陈兴     41.86      188  0.22 5  薛永成   26.68      188  0.14 6  张永福   18.25      188  0.10 7  李华田   18.25      188  0.10 8  葛祥营   11.89      

sql server 2000 单主键高效分页存储过程 (支持多字段排序)

sql server 2000 单主键高效分页存储过程 (支持多字段排序) Create PROC P_viewPage             /*              nzperfect [no_mIss] 高效通用分页存储过程(双向检索) 2007.5.7  QQ:34813284              敬告:适用于单一主键或存在唯一值列的表或视图              ps:Sql语句为8000字节,调用时请注意传入参数及sql总长度不要超过指定范围            

PHP二维数组如何根据某个字段排序

分享下PHP二维数组如何根据某个字段排序的方法. 从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条. 本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求. 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条. 这个要求就不是 ORDER BY 能解决的问题了.因此翻看 PHP手册查找到了如下方法,做此笔记.

CakePHP下使用paginator需要对多个字段排序的做法

原文:http://blog.csdn.net/kunshan_shenbin/article/details/7644603 CakePHP下使用paginator需要对多个字段排序的做法 2012-06-08 11:03 448人阅读 评论(0) 收藏 举报 有的时候在进行翻页时需要对多个字段进行排序. 但是CakePHP的paginator的sort方法默认只能对一个字段进行排序. 解决的办法有2种: 1. 在model中追加一个虚拟字段: http://book.cakephp.org/