jQuery对Table一个字段排序

最近做一个机票的系统,要对航班信息进行排序,所以整理了一下,把排序的方法写下来。

首先table的结构大概如下

最后显示的样式为

首先在每一个tr上加一个自定义属性:data-sort-field-ftime,对应的值就是起飞时间去掉":"后的一个字符串

这样,我们在排序的时候,只要将每个tr的data-sort-field-ftime的值,parseInt后,然后冒泡排序,就可以实现我要的效果。

给排序按钮加一个自定义属性:data-sort-type,值为"none"、"asc"、"desc"3个值中的一个,用来标记当前的排序顺序

然后,就可以给排序按钮加单击事件了:

       $(‘div#flightSearchResultBox‘).on("click", "#dc_filter_box_div ul#sortUL a[data-sort-type]", function () {
                var $this = $(this);
                var sortID = $this.attr("id");
                var sortType = $(this).dValue("sort-type");
                if (sortType=="none") {
                    sortType = "asc";
                    $this.children("i").addClass("arrow_up");
                }
                else if (sortType == "asc") {
                    sortType = "desc";
                    $this.children("i").removeClass("arrow_up").addClass("arrow_down");
                } else if (sortType == "desc") {
                    sortType = "asc";
                    $this.children("i").removeClass("arrow_down").addClass("arrow_up");
                }
                $this.dValue("sort-type", sortType);

                //除了当前单击的排序条件外,其他所有的排序条件
                var $btnSortListWithOutThis = $("#dc_filter_box_div ul#sortUL a").not($this);

                if (sortID == "btnSortFlightTime") {
                    /*按起飞时间排序*/
                    //去掉排序样式并将排序类型设为"none"
                    $btnSortListWithOutThis.find("i").removeClass("arrow_down").removeClass("arrow_up").end().dValue("sort-type", "none");
                    var $trList = sortTableByFlightTime(sortType);
                    //将原来的tr清空,再将排序后的tr插入到table的dom中
                    $trList.appendTo($("#dc_Table > tbody").empty());
                } else if (sortID == "btnSortPrice") {
                    /*按价格排序*/
                }
            });

当点击排序按钮时,取其data-sort-type属性判断当前选中的排序顺序,如果为"none"说明没有排序过,那么按照asc来排序,如果为"asc",则说明已经按照顺序排序了,现在需要按照"desc"排序。

设定好属性后,然后就要调用sortTableByFlightTime 这个方法来排序了。

        //根据起飞时间排序
        //参数:sortType=>asc或者desc;
        function sortTableByFlightTime(sortType) {
            var $trList = getDCTrList();//sort-field-ftime
            //冒泡排序
            for (var i = 0; i < $trList.length - 1; i++) {
                for (var j = 0; j < $trList.length - 1 - i; j++) {
                    var value1 = parseInt($trList[j].attributes["data-sort-field-ftime"].nodeValue);
                    var value2 = parseInt($trList[j + 1].attributes["data-sort-field-ftime"].nodeValue);
                    if (sortType === "asc" ? value1 > value2 : value1 < value2) {
                        var $temp = $trList[j];
                        $trList[j] = null;
                        $trList[j] = $trList[j + 1];
                        $trList[j + 1] = null;
                        $trList[j + 1] = $temp;
                    }
                }
            }
            //返回排序后的tr集合
            return $trList;
        }

首先,$trList变量时获取了Table下所有的tr,是一个jQuery对象=>$("#tableid tbody > tr");

然后就是经典的冒泡排序了,根据sortType来判断返回的是顺序的还是倒序的jQuery对象。

当返回了jQuery对象后,将原有table的tr清空,将此jQuery对象插入到table中即可。

时间: 2024-08-25 07:03:40

jQuery对Table一个字段排序的相关文章

sql 多个字段排序,头一个字段排序完,再对第二个字段进行排序(以此类推)

现根据num排序,num数字相同的根据时间进行排序,都是降序DESC SELECT * FROM counts ORDER BY num DESC,create_time DESC

stream根据map中的一个字段排序

org = org.stream().sorted(Comparator.comparing(SynchronousDataService::sort2)).collect(Collectors.toList());// 排序 private static String sort2(Map<String, Object> a) {  return (String) a.get("uri"); } 原文地址:https://www.cnblogs.com/sikuaiwu/p

jquery实现table按时间排序

$(document).ready(function(){ sortTable();}); var sortTable = function(){    $("#tableList").find("#cell_startDate").bind("click",function(){        var sortType = changSign("#tableList","#cell_startDate")

List多字段排序,orderBy,ThenBy

List排序问题,orderBy,ThenBy 1.List中一个字段排序 前几天做的项目中,获取的List<T>需要用某个字段来进行排序,困扰了很久.用OrderBy解决了.具体是这样的. List.OrderBy(i=>i.id):表示根据id来排序,默认是升序. List.OrderByDescending(i=>i.name):根据name排序,降序排列. 2.List中两个字段排序: 写法如下,直接用例子: List.OrderBy(i=>i.id).ThenBy(

php 多维数据根据某个或多个字段排序

实现多维数组的指定多个字段排序 上面的实例讲解了如何实现多维数组指定一个字段排序,但如果要实现指定多个字段来对数组进行排序该如何思考? 多个字段是几个?2个,3个或更多,所以这个不确定的因素需要排除. 我们先来看2指定2个字段进行排序的方案: $arr = array( '0' => array( 'id' => 3, 'age' => 27 ), '1' => array( 'id' => 5, 'age' => 50 ), '2' => array( 'id'

awk加Sort实现对前N-1个字段作Key,最后一个字段作Value的排序

最近有一些数据,形如: a1,asdff,dddd,23 zz,ss,ff,hh,kk,56 pppp,90 Wwww,qqq,eee,ttt,yyy,44 这样的数据,需要将前面的N-1个字段作为Key,最后一个字段做Value,并根据Value排序,琢磨了很久,终于初步实现了,故在此备注和分享: awk 'BEGIN{FS=","; OFS=" "}{ <span style="white-space:pre"> </spa

jQuery对table排序

<script> //col对应列,cmp两数比较方法,返回值为TRUE,FALSE function sort(col, cmp) { var table = $("#test")//获取table var trs = table.find("tr");//找到所有行 var max; var index; var tmp; var arr = new Array(); for (i = 0; i < trs.length; i++) { arr

在数据库中加一个字段并给予排序

在数据库中加一个字段,见给数据库加字段部分的介绍 在ALL的TWIG中理性按键的类型,来增加排序功能如下:                <th>状态<br/><a class="asc" data-id="status=asc">正序</a> | <a class="desc" data-id="status=desc">倒序</a></th>

非常强大的table根据表头排序,点击表头名称,对其内容排序

js代码: 1 /** 2 * 通过表头对表列进行排序 3 * 4 * @param sTableID 5 * 要处理的表ID<table id=''> 6 * @param iCol 7 * 字段列id eg: 0 1 2 3 ... 8 * @param sDataType 9 * 该字段数据类型 int,float,date 缺省情况下当字符串处理 10 */ 11 function orderByName(sTableID, iCol, sDataType) { 12 var oTab