《JavaScript高级程序设计》学习笔记(表格排序)
来源:互联网 发布:软件行业销售招聘 编辑:程序博客网 时间:2024/05/17 08:18
《JavaScript高级程序设计》学习笔记(表格排序)
表格排序
利用javascript直接在客户端对表格进行排序
数组
sort 方法 返回一个元素已经进行了排序的 Array 对象(注意参数设置)
localeCompare 方法 返回一个值,指出在当前的区域设置中两个字符串是否相同(设置sort参数)
reverse 方法 返回一个元素顺序被反转的 Array 对象(用于反转排序顺序)
对单列表格排序
1 为表格头部创建<thead/>元素,为存放数据的列创建<tbody/>元素
2 获取<tbody/>元素和它所包含的行的引用:
var oTable = document.getElementById(sTableID);
var oTBody = oTable.tBodise[0];
var colDataRows = oTBody.rows;
3 创建一个数组,并将<tr/>元素引用放入其中
var aTRs = new Array;
for(var i=0; i < colDataRows.length; i++){
aTRs.push(colDataRows[i]);
}
4 对新数组进行排序
比较函数:
function compareTRs(oTR1, oTR2){
var sValue1 = oTR1.cell[0].firstchild.nodeValue;
var sValue2 = oTR2.cell[0].firstchild.nodeValue;
return sValue1.localeCompare(sValue2);
}
aTRs.sort(compareTRs);
5 创建文档碎片储存排好序的<tr/>元素
var oFragment = document.createDocumentFragment();
for(var i=0; i < aTRs.length; i++){
oFragment.appendChile(aTRs[i]);
}
6 用appendChile方法把排好序的<tr/>元素添加到<tbody/>上
oTBody.appendChile(oFragment);
7 在<thead/>元素的标签上添加onclick事件,触发排序事件
对多列表格进行排序
1 为表格头部创建<thead/>元素,为存放数据的列创建<tbody/>元素(同上)
2 获取<tbody/>元素和它所包含的行的引用(同上)
3 创建一个数组,并将<tr/>元素引用放入其中
var aTRs = new Array;
for(var i=0; i < colDataRows.length; i++){
aTRs[i] = colDataRows[i];
}
4 对新数组进行排序
由于用于排序的比较函数只能有两个参数,所以创建一个比较函数生成器来返回一个比较函数的函数
function generateCompareTRs(iCol) {
return function compareTRs(oTR1, oTR2) {
var sValue1 = oTR1.cell[iCol].firstchild.nodeValue;
var sValue2 = oTR2.cell[iCol].firstchild.nodeValue;
return sValue1.localeCompare(sValue2);
};
}
//iCol是列的索引
aTRs.sort(generateCompareTRs(1));
//对数组进行排序
5 创建文档碎片储存排好序的<tr/>元素(同上)
6 用appendChile方法把排好序的<tr/>元素添加到<tbody/>上(同上)
7 在<thead/>元素的标签上添加onclick事件,触发排序事件
注意要传递要排序的列的索引
逆序排列
可以在第一次排序之后,再触发排序事件的时候用reverse函数反转排序数组
aTRs.reverse();
对不同的数据类型进行排序
创建转换函数
function convert(sValue, sDataType) {
swich(sDataType) {
case "int":
return parseInt(sValue);
case "float":
return parseFloat(sValue);
case "date":
return new Date(Date.parse(sValue));
default:
return sValue.toString();
}
}
排序函数
对于数字和日期localeCompare不支持,所以使用大于小于号
function generateCompareTRs(iCol, sDataType) {
return function compareTRs(oTR1, oTR2) {
var vValue1 = convert(oTR1.cell[iCol].firstchild.nodeValue, sDataType);
var vValue2 = convert(oTR2.cell[iCol].firstchild.nodeValue, sDataType);
if (vValue1 < vValue2) {
return -1;
} else if (vValue1 > vValue2) {
return 1;
} else {
return 0;
}
};
}
高级排序
对于不能进行正常排序的列(如链接、图像等),可以给<td/>添加value属性,再用getAttribute获取其值,并用来排序。
注意:对于严格的xhtml来说,这样做是不合法的,变通的方法是在title中放这个值,或设置一个不可见的div存放这个值
- 《JavaScript高级程序设计》学习笔记(表格排序)
- 《JavaScript高级程序设计》学习笔记(语句)
- 《JavaScript高级程序设计》学习笔记(BOM1)
- 《JavaScript高级程序设计》学习笔记(BOM2)
- 《JavaScript高级程序设计》学习笔记(DOM1)
- 《JavaScript高级程序设计》学习笔记(DOM2)
- 《JavaScript高级程序设计》学习笔记(函数)
- 《JavaScript高级程序设计》学习笔记(继承)
- 《JavaScript高级程序设计》学习笔记(DOM2)
- 《JavaScript高级程序设计》学习笔记(拖放)
- JavaScript高级程序设计学习笔记(一)
- JavaScript高级程序设计学习笔记(1)
- javaScript高级程序设计学习笔记(1)
- javaScript高级程序设计学习笔记(2)
- javaScript高级程序设计学习笔记(4)
- Javascript高级程序设计学习笔记(二)
- 《JavaScript高级程序设计》学习笔记(第一章)
- javascript高级程序设计学习笔记
- MFC SDI应用程序的启动顺序
- 应用ActionScript对放大镜的继续改进
- Dom4j递归解析XML实现JS的getElementsByName类似方法
- 学习CSS优化的十八项技巧
- 安装oracle10g
- 《JavaScript高级程序设计》学习笔记(表格排序)
- 鼠标滚轮缩放图片javascript
- JS操作select相关方法:新增 修改 删除 选中 清空 判断存在 等
- 类似msn的提示效果代码系列一:简单的脚本提示
- 哈希表(Hashtable)简述
- CEdit控件中换行
- 为什么JSP导出为excel,word后丢失了格式?
- 使用C#开发一个简单的P2P应用
- 电子邮件礼仪