最近作一個機票的系統,要對航班信息進行排序,因此整理了一下,把排序的方法寫下來。javascript
首先table的結構大概以下java
最後顯示的樣式爲node
首先在每個tr上加一個自定義屬性:data-sort-field-ftime,對應的值就是起飛時間去掉":"後的一個字符串app
這樣,咱們在排序的時候,只要將每一個tr的data-sort-field-ftime的值,parseInt後,而後冒泡排序,就能夠實現我要的效果。dom
給排序按鈕加一個自定義屬性:data-sort-type,值爲"none"、"asc"、"desc"3個值中的一個,用來標記當前的排序順序this
而後,就能夠給排序按鈕加單擊事件了:對象
$('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"排序。blog
設定好屬性後,而後就要調用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中便可。