本地排序jq写法
尚有不明之处,不做解释了。上代码了。。
转载自:网络。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>table-sort</title> <link rel="stylesheet" type="text/css" href="bootstrap.min.css"> <style type="text/css"> *{margin:0;padding:0;list-style:none;} .tableStyle{width:970px;margin:auto;margin-top:50px;} .tableStyle>thead>tr>th{cursor:pointer;text-align:center;} .sort{position:relative;} .default-up-down:after{ content:''; display:block; position:absolute; right:0; top: 9px; border-left:5px solid transparent; border-right:5px solid transparent; border-bottom:8px solid #DCDCDC;} .default-up-down:before{ content:''; display:block; position:absolute; right:0; bottom: 9px; border-left:5px solid transparent; border-right:5px solid transparent; border-top:8px solid #DCDCDC;} /* 7A80DD */ .custom-up:after{ content:''; display:block; position:absolute; right:0; top: 9px; border-left:5px solid transparent; border-right:5px solid transparent; border-bottom:8px solid #7A80DD;} .custom-down:before{ content:''; display:block; position:absolute; right:0; bottom: 9px; border-left:5px solid transparent; border-right:5px solid transparent; border-top:8px solid #7A80DD;} </style> </head> <body> <table id="tableSort" class="table table-bordered tableStyle"> <thead> <tr> <th type="number" class="sort default-up-down"> 序号 </th> <th type="string" class="sort default-up-down"> 书名 </th> <th type="number" class="sort default-up-down"> 价格(元) </th> <th type="string" class="sort default-up-down"> 出版时间 </th> <th type="number" class="sort default-up-down"> 印刷量(册) </th> <th type="ip" class="sort default-up-down"> IP </th> </tr> </thead> <tbody> <tr class="hover"> <td class="sequence"> 1 </td> <td> 狼图腾 </td> <td> 29.80 </td> <td> 2009-10 </td> <td> 50000 </td> <td> 192.168.1.125 </td> </tr> <tr> <td class="sequence"> 2 </td> <td> 孝心不能等待 </td> <td> 29.80 </td> <td> 2009-09 </td> <td> 800 </td> <td> 192.68.1.125 </td> </tr> <tr> <td class="sequence"> 3 </td> <td> 藏地密码2 </td> <td> 28.00 </td> <td> 2008-10 </td> <td> </td> <td> 192.102.0.12 </td> </tr> <tr> <td class="sequence"> 4 </td> <td> 藏地密码1 </td> <td> 24.80 </td> <td> 2008-10 </td> <td> </td> <td> 215.34.126.10 </td> </tr> <tr> <td class="sequence"> 5 </td> <td> 设计模式之禅 </td> <td> 69.00 </td> <td> 2011-12 </td> <td> </td> <td> 192.168.1.5 </td> </tr> <tr> <td class="sequence"> 6 </td> <td> 轻量级 Java EE 企业应用实战 </td> <td> 99.00 </td> <td> 2012-04 </td> <td> 5000 </td> <td> 192.358.1.125 </td> </tr> <tr> <td class="sequence"> 7 </td> <td> Java 开发实战经典 </td> <td> 79.80 </td> <td> 2012-01 </td> <td> 2000 </td> <td> 192.168.1.25 </td> </tr> <tr> <td class="sequence"> 8 </td> <td> Java Web 开发实战经典 </td> <td> 69.80 </td> <td> 2011-11 </td> <td> 2500 </td> <td> 215.168.54.125 </td> </tr> </tbody> </table> </body> <script src="jquery-3.1.1.min.js"></script> <script> //图标 sort() function sort(){ $('.sort').on('click',function(){ if($(this).hasClass('default-up-down')||$(this).hasClass('custom-up')){ $(this).addClass('custom-down').removeClass('custom-up default-up-down'); $(this).siblings('.sort').addClass('default-up-down').removeClass('custom-up custom-down'); }else if($(this).hasClass('custom-down')){ $(this).addClass('custom-up').removeClass('custom-down default-up-down'); $(this).siblings('.sort').addClass('default-up-down').removeClass('custom-up custom-down'); } }) } //排序开始 var tableObject = $('#tableSort'), //获取id为tableSort的table对象 tbHead = tableObject.children('thead'), //获取table对象下的thead tbHeadTh = tbHead.find('tr th'), //获取thead下的tr下的th tbBody = tableObject.children('tbody'), //获取table对象下的tbody tbBodyTr = tbBody.find('tr'), //获取tbody下的tr sortIndex = -1;//排序初始值 tbHeadTh.each(function () {//遍历thead的tr下的th var thisIndex = tbHeadTh.index($(this)); //获取th所在的列号 $(this).click(function () {//给当前表头th增加点击事件 var dataType = $(this).attr("type");//点击时获取当前th的type属性值 checkColumnValue(thisIndex, dataType); }); }); //对表格排序 function checkColumnValue(index,type){ var trsValue = new Array(); tbBodyTr.each(function () { var tds = $(this).find('td'); //获取行号为index列的某一行的单元格内容与该单元格所在行的行内容添加到数组trsValue中,保存起来,并清空tbody。 trsValue.push(type + ".separator" + $(tds[index]).html() + ".separator" + $(this).html()); $(this).html(""); }); var len = trsValue.length; if (index == sortIndex) { //如果已经排序了则直接倒序 trsValue.reverse(); } else { for (var i = 0; i < len; i++) { //split() 方法用于把一个字符串分割成字符串数组 //获取每行分割后数组的第一个值,即此列的数组类型,定义了字符串\数字\Ip type = trsValue[i].split(".separator")[0]; for (var j = i + 1; j < len; j++) { //获取每行分割后数组的第二个值,即文本值 value1 = trsValue[i].split(".separator")[1]; //获取下一行分割后数组的第二个值,即文本值 value2 = trsValue[j].split(".separator")[1]; //接下来是数字\字符串等的比较 if (type == "number") { value1 = value1 == "" ? 0 : value1; value2 = value2 == "" ? 0 : value2; if (parseFloat(value1) > parseFloat(value2)) { var temp = trsValue[j]; trsValue[j] = trsValue[i]; trsValue[i] = temp; } } else if (type == "ip") { if (ip2int(value1) > ip2int(value2)) { var temp = trsValue[j]; trsValue[j] = trsValue[i]; trsValue[i] = temp; } } else { if (value1.localeCompare(value2) > 0) {//比较字符串 var temp = trsValue[j]; trsValue[j] = trsValue[i]; trsValue[i] = temp; } } } } } for (var i = 0; i < len; i++) { $("tbody tr:eq(" + i + ")").html(trsValue[i].split(".separator")[2]); } sortIndex = index; } //IP转成整型 function ip2int(ip) { var num = 0; ip = ip.split("."); num = Number(ip[0]) * 256 * 256 * 256 + Number(ip[1]) * 256 * 256 + Number(ip[2]) * 256 + Number(ip[3]); return num; } </script> </html>