【发布时间】:2012-10-14 22:37:21
【问题描述】:
假设我有一个包含字段的表格
Rank、Id和Name
点击 Rank 后,表格会使用此代码按等级升序排序
$(function() {
$("#rank").click(function() {
var rows = $("#rank_table tbody tr").get();
rows.sort(sortTable);
$.each(rows, function(index, row) {
$("#rank_table").children("tbody").append(row);
});
});
});
function sortTable(a, b) {
var A = parseInt($(a).children('td').eq(0).text());
var B = parseInt($(b).children('td').eq(0).text());
if (A < B) return -1;
if (A > B) return 1;
return 0;
}
Rank 和 Id 是整数,id 分别为 rank 和 st_id。
所以,我想要实现的是,当我单击 Rank 字段一次时,表格会按升序排序,再次单击它会按降序对表格进行排序。
我想对rank 和Id 这两个字段都这样做。对于降序,我是否需要使用其他函数而不是升序这个升序函数。
如何使用 jQuery 和 sort() function(not plugins) 来实现这一点?
这里是html
<!Doctype html>
<html>
<head>
<style>
#thead {
cursor: pointer;
text-decoration: underline;
text-align: center;
}
#tbody {
text-align: center;
}
</style>
<script src="libs/jquery-1.5.1.js" type="text/javascript"></script>
<script src="table_sort.js" type="text/javascript"></script>
</head>
<body>
<table id="rank_table">
<thead id="thead">
<tr>
<th id="rank">Rank</th>
<th id="st_id">Student_id</th>
<th id="st_name">Name</th>
</tr>
</thead>
<tbody id="tbody">
<tr>
<td>3</td>
<td>2</td>
<td>Ted</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>John</td>
</tr>
<tr>
<td>5</td>
<td>4</td>
<td>Neil</td>
</tr>
<tr>
<td>1</td>
<td>5</td>
<td>Alex</td>
</tr>
<tr>
<td>4</td>
<td>3</td>
<td>Nave</td>
</tr>
</tbody>
</table>
</body>
</html>
【问题讨论】:
-
最简单的方法是在您的可排序列上设置一个数据属性或类名,以指示它当前的排序方式。然后,在您的点击处理程序中,检查当前排序是什么并选择当时使用的排序函数(并更新属性/类)。
-
类似@Shmiddty
codeif($("#rank")).hasClass('desc')){ return (A == B ? 0 : (A > B ? 1 :-1)); $("#rank").removeClass('desc'); $("#rank").addClass('asc'); } else { return (A == B ? 0 : (A > B ? 1 : -1)); $("#rank").removeClass('asc'); $("#rank").addClass('desc'); }code -
当它应该按降序排序时,可以像调用
rows.reverse()一样简单。 -
是的,这是一个很好的选择。
标签: javascript jquery sorting html-table