网上找了个表格排序,不过升序和降序存在问题,排序时间不对,因此,写了一个表格排序插件
可以根据任意字段进行排序,由于是js排序,因此是无刷新,并且速度比较快
效果图:
默认使用例子:
<script type="text/javascript" src="/static/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/js/jquery.table.sort.js"></script>
$(function(){
$(".DataGrid").sort();
});
带参数例子:
<script type="text/javascript" src="/static/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/js/jquery.table.sort.js"></script>
$(function(){
$(".DataGrid").sort({
'ascImgUrl':'/static/images/bullet_arrow_up.png',
'descImgUrl':'/static/images/bullet_arrow_down.png',
'engRow':-1,
'isHeaderTh':true
});
});
参数Api详解:
参数名 | 类型 | 描述 |
ascImgUrl | string | 升序图片地址 |
descImgUrl | string | 降序图片地址 |
endRow | int | 最后一行(负数代表倒数第几行) |
isHeaderTh | boolean | 头部标题是否是th |
带html例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>活动编辑器</title>
<link rel="stylesheet" href="css/editorBase.css" type="text/css">
<link rel="stylesheet" href="css/kickstart-buttons.css" type="text/css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.table.sort.js"></script>
<script type="text/javascript" src="js/artDialog.js?skin=blue"></script>
<script type="text/javascript">
$(function(){
$(".DataGrid").sort({
'ascImgUrl':'images/bullet_arrow_up.png', //升序图片
'descImgUrl':'images/bullet_arrow_down.png', //降序图片
'endRow':-1 //需要排序的最后一行 -1代表 倒数第二行
});
//全选
$("#checkAll").click(function(){
$(":checkbox").attr("checked",$(this).attr("checked"));
});
});
</script>
</head>
<body>
<form action="/index.php?app=editor&m=Common&action=outputConfig" method="post">
<font color="red">新活动不能直接使用新活动配置表,只能新建或者复制活动</font>
<table class="DataGrid" cellspacing="0" width="100%">
<thead>
<tr>
<th colspan="9">活动列表</th>
</tr>
<tr>
<th><input type="checkbox" id="checkAll"></input></th>
<th sort="true">ID</th>
<th sort="true">活动名</th>
<th sort="true">类别</th>
<th sort="true">开始时间</th>
<th sort="true">结束时间</th>
<th width="12%">操作</th>
</tr>
</thead>
<tbody>
<input type="hidden" name="sortId[]" value="668" />
<tr class="odd">
<td align="center"><input name="id[]" class="checkIds" type="checkbox" value=668></input></td>
<td>668 </td>
<td>
特殊类测试
</td>
<td>特殊类 </td>
<td>2013-04-19 16:50:00 </td>
<td>2013-04-10 16:50:00 </td>
<td>
<a href="/index.php?app=editor&m=Special&action=save&id=668"><font color="#FF0000">修改</font></a>
| <a href="/index.php?app=editor&m=Common&action=copy&id=668"><font color="#FF0000">复制</font></a></font></a>
| <a href="/index.php?app=editor&m=Common&action=delete&id=668" class="delete">删除</font></a>
</td>
</tr>
<input type="hidden" name="sortId[]" value="667" />
<tr>
<td align="center"><input name="id[]" class="checkIds" type="checkbox" value=667></input></td>
<td>667 </td>
<td>
<font color=red>测试</font>
</td>
<td>排行榜类 </td>
<td>2013-04-01 16:41:00 </td>
<td>2013-04-11 16:41:00 </td>
<td>
<a href="/index.php?app=editor&m=Rank&action=save&id=667"><font color="#FF0000">修改</font></a>
| <a href="/index.php?app=editor&m=Common&action=copy&id=667"><font color="#FF0000">复制</font></a></font></a>
| <a href="/index.php?app=editor&m=Common&action=delete&id=667" class="delete">删除</font></a>
</td>
</tr>
<input type="hidden" name="sortId[]" value="666" />
<tr class="odd">
<td align="center"><input name="id[]" class="checkIds" type="checkbox" value=666></input></td>
<td>666 </td>
<td>
<font color=grey>sadasd</font>
</td>
<td>排行榜类 </td>
<td>2013-04-18 10:16:00 </td>
<td>2013-04-09 10:16:00 </td>
<td>
<a href="/index.php?app=editor&m=Rank&action=save&id=666"><font color="#FF0000">修改</font></a>
| <a href="/index.php?app=editor&m=Common&action=copy&id=666"><font color="#FF0000">复制</font></a></font></a>
| <a href="/index.php?app=editor&m=Common&action=delete&id=666" class="delete">删除</font></a>
</td>
</tr>
<input type="hidden" name="sortId[]" value="665" />
<tr>
<td align="center"><input name="id[]" class="checkIds" type="checkbox" value=665></input></td>
<td>665 </td>
<td>
<font color=red>测试</font>
</td>
<td>特殊类 </td>
<td>2013-03-30 17:56:00 </td>
<td>2013-05-14 17:56:00 </td>
<td>
<a href="/index.php?app=editor&m=Special&action=save&id=665"><font color="#FF0000">修改</font></a>
| <a href="/index.php?app=editor&m=Common&action=copy&id=665"><font color="#FF0000">复制</font></a></font></a>
| <a href="/index.php?app=editor&m=Common&action=delete&id=665" class="delete">删除</font></a>
</td>
</tr>
<input type="hidden" name="sortId[]" value="664" />
<tr class="odd">
<td align="center"><input name="id[]" class="checkIds" type="checkbox" value=664></input></td>
<td>664 </td>
<td>
<font color=red>测试</font>
</td>
<td>特殊类 </td>
<td>2013-03-30 17:56:00 </td>
<td>2013-05-14 17:56:00 </td>
<td>
<a href="/index.php?app=editor&m=Special&action=save&id=664"><font color="#FF0000">修改</font></a>
| <a href="/index.php?app=editor&m=Common&action=copy&id=664"><font color="#FF0000">复制</font></a></font></a>
| <a href="/index.php?app=editor&m=Common&action=delete&id=664" class="delete">删除</font></a>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td> </td>
<td colspan="11"><input type="submit" id="saveSort" value="保存"></td>
</tr>
</tfoot>
</table>
<br />
</form>
</body>
</html>
jquery.table.sort.js代码:
/**
* jquery表格插件
* @author ZouHao
* @param ascImgUrl 升序图片地址
* @param descImgUrl 降序图片地址
* 例子:
* 1:默认使用语法
* $("table").sort();
* 2:参数使用语法
* $("table").sort({
* 'ascImgUrl':'/static/images/bullet_arrow_up.png',
'descImgUrl':'/static/images/bullet_arrow_down.png',
'endRow':0, //最后一行
'isHeaderTh':true //头部是th或者td
* });
*/
;(function ($) {
$.fn.sort = function (options) {
var settings = $.extend({
'ascImgUrl':'/static/images/bullet_arrow_up.png', //升序图片
'descImgUrl':'/static/images/bullet_arrow_down.png', //降序图片
'endRow':0, //最后一行
'isHeaderTh':true //头部是th或者td
},options);
init(this);
function init(p){
//初始化一些变量
var node=settings.isHeaderTh?'th':'td';
var trList=$(p).find("tr "+node+"[sort='true']");
if(settings.endRow==0){
settings.endRow=$(p).find("tr").size();
}else if(settings.endRow<0){
settings.endRow=$(p).find("tr").size()+settings.endRow;
}else{
settings.endRow=$(p).find("tr").size()-settings.endRow;
}
//初始化点击表格头部事件
trList.click(function(){
//获取当前行数
settings.startRow=$(this).parent().index();
settings.index=$(this).index();
if($(this).find("img").size()==2){
addImg(trList);
removeImg(this,'asc');
changeTableBody(p,'asc');
}else{
if($(this).find("img").attr("src")==settings.ascImgUrl){
addImg(trList);
removeImg(this,'desc');
changeTableBody(p,'desc');
}else{
addImg(trList);
removeImg(this,'asc');
changeTableBody(p,'asc');
}
}
});
//初始化头部图片
addImg(trList);
}
//将数据进行排序
function changeTableBody(p,sort){
data=new Array();
//所选的行
var trBodyList=$(p).find("tr:lt("+settings.endRow+"):gt("+settings.startRow+")");
trBodyList.each(function(i){
data[i]=new Array();
$(this).find("td").each(function(j){
data[i][j]=$(this).html();
});
});
data.sort(function(x, y){
if(sort=='asc'){
return x[settings.index].localeCompare(y[settings.index]);
}else{
return y[settings.index].localeCompare(x[settings.index]);
}
});
trBodyList.each(function(i){
$(this).find("td").each(function(j){
$(this).html(data[i][j]);
});
});
}
/**
* 为每个表格头部添加图片
*/
function addImg(trList){
trList.find("img").remove();
trList.append('<img src="'+settings.ascImgUrl+'" style="width:8px;height:8px;" /><img src="'+settings.descImgUrl+'" style="width:8px;height:8px;" />')
}
/**
* 移出当前点击表格升序/降序图片
*/
function removeImg(p,sort){
var imgUrl=sort=='desc'?settings.ascImgUrl:settings.descImgUrl;
$(p).find("img").each(function(){
if($(this).attr("src")==imgUrl){
$(this).remove();
return false;
}
});
}
};
})(jQuery);