table自定义排序
来源:互联网 发布:ie修复软件下载 编辑:程序博客网 时间:2024/05/24 00:44
实际上表格的排序就是把要排序的那列(或行),的值存在一个数组中,然后对数组用比较函数进行排序,然后再对表格内容进行替换.
思想:考虑代码的简单易用及可重复;
现在举例说明,以列排序为例;
1)表格的规范:
因为排序是在同类型之间进行的,比如:字符串,数字,日期;然而,用来触发排序事件的表头和该列数据的类型可能不同,所以在生成表格的时候最好将表头和下面的内容分开.以免在取值的时候还要对表头进行排除.所以可以采取下面的方法:<thead></thead><tbody></tbody>表头放在thead里面,数据放在tbody里面(thead,tbody,tfoot 这三个是表格自身就拥有的,不是自己创造的;)这样就更直观了.当点击thead里面tr里的td后,触发排序事件,将tbody里的某列进行排序.
2)统一排序函数.
为了代码的简易,整个表格排序用一个函数,不同的列排序只是传递的参数不同;比如,第一列传1, 第二列则传2;但因为每列的数据类型可能不同,所以要进行判断.而且要将数据转换成可比较的类型.甚至可以通过传的参数不同获得不同的比较函数;
3)将要排序的列获取到,放在数组中;
为了程序的简单,可以直接把tr放在数组中,然后在比较函数中进行取值.将tr放在数组中时不会从表格中删除tr元素.因为仅仅存储了指针,并不是实际的元素.
4)排序
对数组里数据的类型进行判断,然后根据类型,进行转换,转成可转换的类型;然后用自己写的比较函数进行比较;得到排好序的数组;
5)按已排序的数组生成新的表格;
6)创建文档碎片,将新表格绑定在碎片一;
7)将文档碎片绑定在tbody上,从而实现了在用户看来刷新了表格的目的;
举个详细的例子:
一个2*3的表格;一列里面放的是名字,一列里面是图片;直接对图片肯定不能排序,所以要在图片的td里面自定义一个值.如:加一个value属性;
from http://blog.sina.com.cn/s/blog_5f54f0be0100cxki.html
思想:考虑代码的简单易用及可重复;
现在举例说明,以列排序为例;
1)表格的规范:
因为排序是在同类型之间进行的,比如:字符串,数字,日期;然而,用来触发排序事件的表头和该列数据的类型可能不同,所以在生成表格的时候最好将表头和下面的内容分开.以免在取值的时候还要对表头进行排除.所以可以采取下面的方法:<thead></thead><tbody></tbody>表头放在thead里面,数据放在tbody里面(thead,tbody,tfoot 这三个是表格自身就拥有的,不是自己创造的;)这样就更直观了.当点击thead里面tr里的td后,触发排序事件,将tbody里的某列进行排序.
2)统一排序函数.
为了代码的简易,整个表格排序用一个函数,不同的列排序只是传递的参数不同;比如,第一列传1, 第二列则传2;但因为每列的数据类型可能不同,所以要进行判断.而且要将数据转换成可比较的类型.甚至可以通过传的参数不同获得不同的比较函数;
3)将要排序的列获取到,放在数组中;
为了程序的简单,可以直接把tr放在数组中,然后在比较函数中进行取值.将tr放在数组中时不会从表格中删除tr元素.因为仅仅存储了指针,并不是实际的元素.
4)排序
对数组里数据的类型进行判断,然后根据类型,进行转换,转成可转换的类型;然后用自己写的比较函数进行比较;得到排好序的数组;
5)按已排序的数组生成新的表格;
6)创建文档碎片,将新表格绑定在碎片一;
7)将文档碎片绑定在tbody上,从而实现了在用户看来刷新了表格的目的;
举个详细的例子:
一个2*3的表格;一列里面放的是名字,一列里面是图片;直接对图片肯定不能排序,所以要在图片的td里面自定义一个值.如:加一个value属性;
<table id="tblSort"> <thead> <tr> <th onclick="sortTable('tblSort', 0)" style="cursor:pointer">类型</th> <th onclick="sortTable('tblSort', 1)" style="cursor:pointer">文件名</th> <th onclick="sortTable('tblSort', 2, 'date')" style="cursor:pointer">创建日期</th> <th onclick="sortTable('tblSort', 3, 'int')" style="cursor:pointer">文件大小</th> </tr> </thead> <tbody> <tr> <td value="doc"><img src="images/wordIcon.gif"</td> <td>Word 文档</td> <td>7/12/2008</td> <td>3</td> </tr> <tr> <td value="xls"><img src="images/xlsIcon.gif"</td> <td>Excel 文档</td> <td>5/11/2008</td> <td>6</td> </tr> <tr> <td value="pdf"><img src="images/pdfIcon.gif"</td> <td>PDF 文档</td> <td>7/5/2007</td> <td>8</td> </tr> </tbody></table>JS函数:function sortTable(sTableId, iCol, sDataType){ var oTable = document.getElementByIdx(sTableId);//获得表 var oTBody = oTable.tBodies[0];//获得放数据的body,因为该表格只有一个tbody,所以直接用[0] var colRows = oTBody.rows;//获得tbody里所有的tr var aTRs = new Array();//声明一个数组 for(var i = 0; i < colRows .length; i++) { aTRs[i] = colRows[i];//将tr依次放入数组中; } if(oTable.sortCol == iCol) { aTRs.reverse();//如果当前要排的列和上次排的列是一样的,就直接逆向排序;也就是说连着对一列点两次,就会进行升序,降序的转换. } else { aTRs.sort(getSortFunction(iCol, sDataType));//排序,并且传入一个获得到的比较函数; } var oFragement = document.createDocumentFragment();//创建文档碎片,用来存放排好的tr for(var i = 0; i < aTRs.length; i++) { oFragement.appendChild(aTRs[i]);//将tr绑定到碎片上. } oTBody.appendChild(oFragement);//将碎片绑定在表格上 oTable.sortCol = iCol;//记住当前列,这个可以用来判断是对数组进行反向排序还是重新按列排;}function getSortFunction(iCol, sDataType){ return function compareTRs(oTR1, oTR2){ var vValue1, vValue2; if(oTR1.cells[iCol].getAttribute("value")) { vValue1 = convert(oTR1.cells[iCol].getAttribute("value"), sDataType); vValue2 = convert(oTR2.cells[iCol].getAttribute("value"), sDataType); } else { vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType) vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType) } if(vValue1 < vValue2) { return -1; } else if(vValue1 > vValue2) { return 1; } else { return 0; } }}function convert(sValue, sDataType){ switch(sDataType) { case "int": return parseInt(sValue); case "float": return parseFloat(sValue); case "date": return new Date(Date.parse(sValue)); default: return sValue.toString(); } }
from http://blog.sina.com.cn/s/blog_5f54f0be0100cxki.html
0 0
- table自定义排序
- lua中pairs/ipairs, foreach/foreachi, table自定义排序
- 自定义Table
- 自定义table
- table排序
- Table 排序
- table排序
- table 排序
- Table排序
- Table排序
- Table排序
- table排序
- table排序
- table排序
- DWZ (JUI) 应用实例(一):通过自定义标签和BaseAction 简化 table 分页排序
- bootstroop table 自定义搜索
- CSS3 自定义Table
- bootstrap-table自定义查询
- 圆的比较
- Android 开发中的多线程编程技术
- DES 加密解密算法的C++实现
- Mybatis分页插件2.0版本发布
- IllegalStateException: Can not perform this action after onSaveInstanceState
- table自定义排序
- 大数据的数据存储与分析
- Android学习——ClickableSpan点击链接事件 改超链接颜色
- DES加密解密的C++源程序
- spring mvc 整合 velocity
- DES加密解密字符串的JAVA实现(lp)
- R语言系列:数据的基本运算
- winrar 5.0 破解
- 寐侠县矢裂滥移彻,耸岗欣窖辗!