<title>JS表格排序</title>
<script type="text/javascript">
var tableSort = {};
(function() {
var oTable = {};
var cellStatus = {};
var sortCells = {};
var limit = {};
var $ = function(id) {
return document.getElementById(id);
}
var objKeyExists = function(key, search) {
if (typeof key != 'number' && typeof key != 'string') {
return false;
}
for (k in search) {
if (k == key) {
return true;
}
}
return false;
}
var _addEvent = function(tableId, cellId) {
oTable[tableId].rows[0].cells[cellId].onclick = function() {
tableSort.sort(tableId, cellId);
}
}
var _addStyle = function(tableId, cellId) {
oTable[tableId].rows[0].cells[cellId].style.cursor = 'pointer';
}
var _addTitle = function(tableId, cellId) {
oTable[tableId].rows[0].cells[cellId].title = '点击排序';
}
var _sortTable = function(tableId, cellId) {
var rows = oTable[tableId].tBodies[0].rows;
var _rows = [];
for (var i = 1; i < rows.length; i++) {
_rows.push(rows[i]);
}
var status = -1;
if (objKeyExists(cellId, cellStatus[tableId])) {
status = 0 - cellStatus[tableId][cellId];
}
cellStatus[tableId][cellId] = status;
if (status == 1) {
oTable[tableId].rows[0].cells[cellId].innerHTML += ' <span style="font-family:webdings;">5</span>';
_rows.sort((function(id){
return function(a, b) {
return _sort(a, b, id);
}
}(cellId)));
} else {
oTable[tableId].rows[0].cells[cellId].innerHTML += ' <span style="font-family:webdings;">6</span>';
_rows.sort((function(id){
return function(a, b) {
return _rsort(a, b, id);
}
}(cellId)));
}
var oFragment = document.createDocumentFragment();
for (var i = 0; i < _rows.length; i++) {
_rows[i].className = i % 2 ? 'tr' : 'tr_spec';
_rows[i].cells[0].className = i % 2 ? 'td_spec2' : 'td_spec1';
if (limit[tableId] > 0) {
if (i >= limit[tableId]) {
_rows[i].style.display = 'none';
} else {
_rows[i].style.display = '';
}
}
oFragment.appendChild(_rows[i]);
}
oTable[tableId].tBodies[0].appendChild(oFragment);
}
var _cleanStatus = function(tableId, cellId) {
for(var i = 0; i < sortCells[tableId].length; i++) {
oTable[tableId].rows[0].cells[sortCells[tableId][i]].innerHTML = oTable[tableId].rows[0].cells[sortCells[tableId][i]].innerHTML.replace(/ <span style=\"font-family\: webdings\">[56]<\/span>$/ig, '');
}
}
var _sort = function(a, b, id) {
var param1 = a.cells[id].innerText;
var param2 = b.cells[id].innerText;
param1 = param1.replace(/[^\d.-]/g, '');
param2 = param2.replace(/[^\d.-]/g, '');
if (param1 == '-' || param1 == '') {
return 1;
}
if (param2 == '-' || param2 == '') {
return -1;
}
//如果两个参数均为字符串类型
if (isNaN(param1) && isNaN(param2)){
return param1.localeCompare(param2);
}
//如果参数1为数字,参数2为字符串
if (!isNaN(param1) && isNaN(param2)){
return -1;
}
//如果参数1为字符串,参数2为数字
if (isNaN(param1) && !isNaN(param2)){
return 1;
}
//如果两个参数均为数字
if (!isNaN(param1) && !isNaN(param2)){
if (Number(param1) > Number(param2)) {
return 1;
}
if (Number(param1) == Number(param2)) {
return 0;
}
if (Number(param1) < Number(param2)) {
return -1;
}
}
//return a.cells[id].innerText - b.cells[id].innerText;
}
var _rsort = function(a, b, id) {
var param1 = b.cells[id].innerText;
var param2 = a.cells[id].innerText;
param1 = param1.replace(/[^\d.-]/g, '');
param2 = param2.replace(/[^\d.-]/g, '');
if (param1 == '-' || param1 == '') {
return -1;
}
if (param2 == '-' || param2 == '') {
return 1;
}
//如果两个参数均为字符串类型
if (isNaN(param1) && isNaN(param2)){
return param1.localeCompare(param2);
}
//如果参数1为数字,参数2为字符串
if (!isNaN(param1) && isNaN(param2)){
return -1;
}
//如果参数1为字符串,参数2为数字
if (isNaN(param1) && !isNaN(param2)){
return 1;
}
//如果两个参数均为数字
if (!isNaN(param1) && !isNaN(param2)){
if (Number(param1) > Number(param2)) {
return 1;
}
if (Number(param1) == Number(param2)) {
return 0;
}
if (Number(param1) < Number(param2)) {
return -1;
}
}
//return b.cells[id].innerText - a.cells[id].innerText;
}
tableSort = {
init : function(tableId, cells, rows) {
oTable[tableId] = $(tableId);
sortCells[tableId] = cells;
cellStatus[tableId] = {};
limit[tableId] = rows ? rows : 0;
for (var i = 0; i < cells.length; i++) {
_addEvent(tableId, cells[i]);
_addStyle(tableId, cells[i]);
_addTitle(tableId, cells[i]);
}
if (rows > 0) {
for (var i = 1; i < $(tableId).rows.length; i++) {
if (i > rows) {
$(tableId).rows[i].style.display = 'none';
}
}
}
},
sort : function(tableId, cellId) {
_cleanStatus(tableId, cellId);
_sortTable(tableId, cellId);
}
}
})();
</script>
<style type="text/css">
*{font-size:12px;}
</style>
<table id="t1" width="400" border="1">
<tr>
<td>第一列</td>
<td>第二列</td>
<td>第三列</td>
<td>第四列</td>
<td>第五列</td>
</tr>
<tr>
<td>1</td>
<td>4</td>
<td>-0.1</td>
<td>2009-01-01</td>
<td>-</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>-0.3</td>
<td>2008-01-01</td>
<td>-</td>
</tr>
<tr>
<td>3</td>
<td>2</td>
<td>4</td>
<td>2008-03-01</td>
<td>-</td>
</tr>
<tr>
<td>4</td>
<td>1</td>
<td>-0.1</td>
<td>2009-02-01</td>
<td>-</td>
</tr>
</table>
<br />
<table id="t2" width="400" border="1">
<tr>
<td>第一列</td>
<td>第二列</td>
<td>第三列</td>
<td>第四列</td>
<td>第五列</td>
</tr>
<tr>
<td>1</td>
<td>4</td>
<td>-0.1</td>
<td>2009-01-01</td>
<td>-</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>-0.3</td>
<td>2008-01-01</td>
<td>-</td>
</tr>
<tr>
<td>3</td>
<td>2</td>
<td>4</td>
<td>2008-03-01</td>
<td>-</td>
</tr>
<tr>
<td>4</td>
<td>1</td>
<td>-0.1</td>
<td>2009-02-01</td>
<td>-</td>
</tr>
</table>
<script type="text/javascript">
tableSort.init('t1', [0, 1, 2, 3]);
tableSort.init('t2', [0, 1, 2, 3], 2);
</script>
分享到:
相关推荐
在实际项目中,还可以使用现有的库和框架,如jQuery的`tablesorter`插件,或者AngularJS、Vue.js等MVVM框架的内置指令,它们提供了更强大和灵活的表格排序功能。 总结起来,JavaScript实现表格排序涉及到对HTML表格...
**Blue Table:JavaScript表格排序插件** 在网页开发中,数据展示经常需要用到表格,而对表格数据进行排序是用户交互中的常见需求。Blue Table是一款基于JavaScript的表格排序插件,它能够帮助开发者轻松实现表格...
"js排序表格,实现按列排序"这个主题主要涉及JavaScript(js)如何用于实现对HTML表格的动态排序,同时结合CSS样式提升表格的美观度。 首先,我们需要理解HTML表格的基本结构,它由`<table>`标签定义,内部包含`...
JavaScript 表格排序双击可进行按表格列排序
四、表格排序 对于表格,我们可以扩展以上方法,监听单元格的拖放事件。在`drop`事件中,不仅要更新单元格的顺序,还要调整相关行的顺序。这可能涉及到对表格数据的重新排序,尤其是当数据与后端同步时。 五、优化...
总结起来,这个JavaScript表格排序示例展示了如何通过监听表头点击事件,使用纯JavaScript实现表格数据的动态排序。它依赖于HTML表格结构,通过JavaScript操作DOM节点进行数据比较和位置交换。在实际项目中,可以...
JavaScript表格排序大全是一个涵盖多种JS表格排序实现方法的资源集合,旨在帮助开发者快速实现动态、交互式的表格数据排序功能。在网页开发中,表格是一种常用的数据展示方式,而JavaScript能够为表格提供强大的交互...
收集起来js表格排序、支持中文、日期、英文、数值排序,多个Javascript表格排序方法,完美解决
用js实现对表格的排序,小demo一个,希望对新手们有点帮助
在JavaScript(JS)中,实现表格排序功能是前端开发中常见的需求,特别是在处理大量数据时。这个功能使得用户可以通过点击表头对数据进行升序或降序排列,提高数据查看和分析的效率。下面我们将详细探讨如何实现这样...
在JavaScript的世界里,实现表格(table)数据的自动排序是一项常见的需求。这通常涉及到对HTML DOM的操作以及数据处理。在给定的资源中,“原生js table表格自动排序效果”提供了一个无需依赖任何外部库(如jQuery...
在JavaScript编程中,实现带箭头的表格排序是一种常见的需求,尤其在数据展示和交互式网页设计中。本文将深入探讨如何使用JavaScript实现这一功能,包括理解基础的HTML表格结构、CSS样式设置以及JavaScript事件处理...
这个"js学习案例实现一个完整的表格排序"旨在帮助开发者理解和掌握如何使用纯JavaScript实现对HTML表格的数据进行动态排序。在这个项目中,我们将探讨以下关键知识点: 1. **HTML表格基础**:首先,了解HTML中的`...
超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序超简单表格排序
总的来说,使用JavaScript实现的页面表格排序功能,不仅可以提高用户体验,还可以减少服务器负载,因为它是在客户端完成的,无需每次排序都向服务器发送请求。这个例子是JavaScript在网页交互设计中的一个典型应用,...
### jQuery 实现表格排序 #### 知识点一:jQuery表格排序插件介绍 在Web开发中,数据展示经常需要通过表格的形式呈现给用户,并且为了方便用户查找所需信息,通常会提供排序功能。传统的表格排序往往需要后端的...
这个轻量级的JavaScript表格排序实现非常实用,特别适合小型项目或对性能要求高的场景。它可以避免引入大型库的开销,同时也易于理解和维护。当然,对于更复杂的需求,例如处理日期或对象排序,可能需要进一步扩展这...
本篇文章将深入探讨如何使用 JavaScript 来实现自定义表格排序。 首先,我们需要理解表格的基本结构。在 HTML 中,表格由 `<table>` 元素定义,行由 `<tr>` 元素表示,列由 `<td>`(表格数据)或 `<th>`(表头)...
在实际应用中,JavaScript表格排序通常涉及到以下步骤: 1. **获取表格数据**:通过DOM操作获取表格的行(tr)和单元格(td),将其转换为数组或其他数据结构。 2. **定义排序规则**:确定根据哪一列进行排序,以及...
<title>JavaScript表格排序 table { width: 100%; border-collapse: collapse; } th, td { text-align: left; padding: 8px; border: 1px solid #ddd; } th { cursor: pointer; } (0)">...