js实现表格的排序(点击表头)
### JS 实现表格排序(点击表头)详细解析 #### 概述 本文将详细介绍一个JavaScript脚本,该脚本可以实现对HTML表格进行排序的功能。用户只需通过点击表格的表头来触发排序操作,非常方便快捷。此脚本文档化程度高、易于理解和维护,适合初学者学习和应用。 #### 功能描述 该脚本的核心功能是在用户点击表头时自动根据当前列的内容对表格进行升序或降序排列,并更新UI显示结果。同时支持设置表格的每页显示行数限制。 #### 核心概念与变量定义 ##### tableSort 对象 这是整个脚本的核心对象,它包含了所有用于实现表格排序的方法和数据。 - **oTable**: 存储页面上所有表格DOM元素的对象。 - **cellStatus**: 记录每个表格的列排序状态。 - **sortCells**: 已经添加了排序功能的单元格列表。 - **limit**: 设置每个表格的最大显示行数限制。 #### 方法详解 1. **获取DOM元素 ($)** ```javascript var $ = function (id) { return document.getElementById(id); } ``` - **用途**:简化获取DOM元素的过程。 - **参数**:`id` - DOM元素的ID。 - **返回值**:对应的DOM元素对象。 2. **判断对象键是否存在 (objKeyExists)** ```javascript var objKeyExists = function (key, search) { // ... code ... } ``` - **用途**:检查指定对象是否包含某个键。 - **参数**: - `key` - 需要检查的键。 - `search` - 对象本身。 - **返回值**:布尔值表示键是否存在。 3. **添加事件监听器 (_addEvent)** ```javascript var _addEvent = function (tableId, cellId) { oTable[tableId].rows[0].cells[cellId].onclick = function () { tableSort.sort(tableId, cellId); }; } ``` - **用途**:为表头单元格添加点击事件监听器。 - **参数**: - `tableId` - 表格ID。 - `cellId` - 单元格索引。 4. **添加样式 (_addStyle)** ```javascript var _addStyle = function (tableId, cellId) { oTable[tableId].rows[0].cells[cellId].style.cursor = 'pointer'; } ``` - **用途**:更改表头单元格的光标样式,使其看起来可点击。 - **参数**: - `tableId` - 表格ID。 - `cellId` - 单元格索引。 5. **添加提示 (_addTitle)** ```javascript var _addTitle = function (tableId, cellId) { oTable[tableId].rows[0].cells[cellId].title = ''; } ``` - **用途**:为表头单元格添加提示文本。 - **参数**: - `tableId` - 表格ID。 - `cellId` - 单元格索引。 6. **排序表格 (_sortTable)** ```javascript var _sortTable = function (tableId, cellId) { // ... code ... } ``` - **用途**:实现表格的排序逻辑。 - **参数**: - `tableId` - 表格ID。 - `cellId` - 单元格索引。 - **实现细节**: - 获取当前表格的所有行。 - 判断当前列的排序状态(升序/降序)。 - 更新表头单元格内的图标。 - 使用JavaScript的`.sort()`方法按指定列排序。 - 重新构建表格结构并插入排序后的行。 7. **清除状态 (_cleanStatus)** ```javascript var _cleanStatus = function (tableId, cellId) { // ... code ... } ``` - **用途**:清理其他列的状态,确保每次只对一个列进行排序。 - **参数**: - `tableId` - 表格ID。 - `cellId` - 单元格索引。 8. **公共方法 (sort)** - **用途**:外部调用的方法,触发排序操作。 - **参数**: - `tableId` - 表格ID。 - `cellId` - 单元格索引。 9. **排序逻辑 (_sort 和 _rsort)** - 这两个方法分别实现了升序和降序的排序逻辑。 - **参数**: - `a`, `b` - 当前比较的两行数据。 - `id` - 需要排序的列索引。 #### 结论 本文介绍了一个简单而有效的表格排序脚本,通过点击表头即可轻松完成排序操作。此脚本具有较高的灵活性和扩展性,可以根据实际需求进行调整和优化。对于Web开发人员来说,这是一个非常实用的工具,能够极大地提升用户体验。
<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';
}
oTable[tableId].rows[0].cells[cellId].title = '点击排序';
}
var _sortTable = function(tableId, cellId) {
var rows = oTable[tableId].tBodies[0].rows;
var _rows = [];
for (var i = 0; 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();
剩余8页未读,继续阅读
- wcy5252014-03-17不错很好,可以用上
- 粉丝: 2
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助