我的第二个JavaScript脚本--对table中的数据排序
来源:互联网 发布:华硕黄静 知乎 编辑:程序博客网 时间:2024/06/01 19:44
已经有很多位大侠已经在网络上贡献了自己的对table中的数据进行排序操作了,不过自己还是写了一个比较简单的排序算法练习和熟悉一下javascript。
其实现的主要思想是:首先得到要排序的表的部分,然后将表的每行数据作为一个数据单元存放在一个数组中,然后根据需要制定各个sort排序函数。
缺点:不是很灵活,有些函数的代码的扩展性不是很好,哈哈。
注意:对汉字进行排序的时候,要使用a.localeCompare(b)函数,不能使用简单的>, =, <运算符。
下面是程序的代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><head>
<style type="text/css">
#datatable{
table-layout:fixed;
width:1000px;
border-collapse:collapse;
text-align:center;
}
#datatable th,td{
border:1px solid #aaa;
}
#datatable thead th{
border-bottom:2px solid #3D580B;
background-color:#AADDFF;
padding:10px 0px;
width: 60px;
}
</style>
<script language="JavaScript">
function sortColumn(tablename,ColumnID,TextType,SortType)
{
var thetable = document.getElementById(tablename);
var rowsArr = Array();
for(var i =0; i<thetable.rows.length;i++)
{
rowsArr.push(thetable.rows[i]);
}
if( TextType.toLowerCase() == 'number' && SortType.toLowerCase() == 'asc' )
{
rowsArr.sort(sortNumberAsc);
}else if(TextType.toLowerCase() == 'char' && SortType.toLowerCase() == 'asc')
{
rowsArr.sort(sortCharAsc);
}else if( TextType.toLowerCase() == 'number' && SortType.toLowerCase() == 'desc' )
{
rowsArr.sort(sortNumberDesc);
}else if(TextType.toLowerCase() == 'char' && SortType.toLowerCase() == 'desc')
{
rowsArr.sort(sortCharDesc);
}
function sortNumberAsc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
if(parseFloat(a)>parseFloat(b))
return 1;
else if( parseFloat(a)< parseFloat(b))
return -1;
else return 0;
}
function sortCharAsc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
return a.localeCompare(b);
}
function sortNumberDesc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
if(parseFloat(a) < parseFloat(b))
return 1;
else if( parseFloat(a) > parseFloat(b))
return -1;
else return 0;
}
function sortCharDesc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
return -a.localeCompare(b);
}
for( i=0; i<rowsArr.length;i++)
{
thetable.appendChild(rowsArr[i]);
}
}
</script>
</head>
<body>
<table id="datatable">
<thead>
<tr>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',0,'number','asc');">注册日期<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',0,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',1,'char','asc');">省<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',1,'char','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',2,'number','asc');">PV<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',2,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',3,'number','asc');">IP数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',3,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',4,'number','asc');">一周内登陆次数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',4,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',5,'number','asc');">一平均在线时间<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',5,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',6,'number','asc');">一周内空间浏览次数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',6,'number','desc');"></th>
</tr>
</thead>
<tbody id="databody">
<tr>
<td>20080404</td>
<td>山东</td>
<td>30</td>
<td>0</td>
<td>5</td>
<td>38.23</td>
<td>100</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>14</td>
<td>0</td>
<td>6</td>
<td>20.81</td>
<td>23</td>
</tr>
<tr>
<td>20080404</td>
<td>内蒙古</td>
<td>13</td>
<td>0</td>
<td>6</td>
<td>35.71</td>
<td>112</td>
</tr>
<tr>
<td>20080401</td>
<td>山东</td>
<td>12</td>
<td>0</td>
<td>4</td>
<td>19.98</td>
<td>7</td>
</tr>
<tr>
<td>20080406</td>
<td>网吧</td>
<td>11</td>
<td>0</td>
<td>6</td>
<td>39.80</td>
<td>92</td>
</tr>
<tr>
<td>20080406</td>
<td>内蒙古</td>
<td>9</td>
<td>0</td>
<td>7</td>
<td>35.85</td>
<td>18</td>
</tr>
<tr>
<td>20080404</td>
<td>内蒙古</td>
<td>9</td>
<td>0</td>
<td>4</td>
<td>31.24</td>
<td>29</td>
</tr>
<tr>
<td>20080404</td>
<td>黑龙江</td>
<td>8</td>
<td>0</td>
<td>7</td>
<td>12.91</td>
<td>55</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>5</td>
<td>9.87</td>
<td>4</td>
</tr>
<tr>
<td>20080403</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>5</td>
<td>36.27</td>
<td>18</td>
</tr>
<tr>
<td>20080402</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>4</td>
<td>18.57</td>
<td>18</td>
</tr>
<tr>
<td>20080406</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>3</td>
<td>48.47</td>
<td>11</td>
</tr>
<tr>
<td>20080402</td>
<td>黑龙江</td>
<td>6</td>
<td>0</td>
<td>4</td>
<td>5.32</td>
<td>1</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>5</td>
<td>0</td>
<td>7</td>
<td>25.92</td>
<td>14</td>
</tr>
<tr>
<td>20080402</td>
<td>山东</td>
<td>5</td>
<td>0</td>
<td>4</td>
<td>7.71</td>
<td>1</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>5</td>
<td>0</td>
<td>3</td>
<td>29.66</td>
<td>17</td>
</tr>
</tbody>
</table>
</body>
</html>
其实现的主要思想是:首先得到要排序的表的部分,然后将表的每行数据作为一个数据单元存放在一个数组中,然后根据需要制定各个sort排序函数。
缺点:不是很灵活,有些函数的代码的扩展性不是很好,哈哈。
注意:对汉字进行排序的时候,要使用a.localeCompare(b)函数,不能使用简单的>, =, <运算符。
下面是程序的代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><head>
<style type="text/css">
#datatable{
table-layout:fixed;
width:1000px;
border-collapse:collapse;
text-align:center;
}
#datatable th,td{
border:1px solid #aaa;
}
#datatable thead th{
border-bottom:2px solid #3D580B;
background-color:#AADDFF;
padding:10px 0px;
width: 60px;
}
</style>
<script language="JavaScript">
function sortColumn(tablename,ColumnID,TextType,SortType)
{
var thetable = document.getElementById(tablename);
var rowsArr = Array();
for(var i =0; i<thetable.rows.length;i++)
{
rowsArr.push(thetable.rows[i]);
}
if( TextType.toLowerCase() == 'number' && SortType.toLowerCase() == 'asc' )
{
rowsArr.sort(sortNumberAsc);
}else if(TextType.toLowerCase() == 'char' && SortType.toLowerCase() == 'asc')
{
rowsArr.sort(sortCharAsc);
}else if( TextType.toLowerCase() == 'number' && SortType.toLowerCase() == 'desc' )
{
rowsArr.sort(sortNumberDesc);
}else if(TextType.toLowerCase() == 'char' && SortType.toLowerCase() == 'desc')
{
rowsArr.sort(sortCharDesc);
}
function sortNumberAsc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
if(parseFloat(a)>parseFloat(b))
return 1;
else if( parseFloat(a)< parseFloat(b))
return -1;
else return 0;
}
function sortCharAsc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
return a.localeCompare(b);
}
function sortNumberDesc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
if(parseFloat(a) < parseFloat(b))
return 1;
else if( parseFloat(a) > parseFloat(b))
return -1;
else return 0;
}
function sortCharDesc(a,b)
{
a = a.cells[ColumnID].innerText?a.cells[ColumnID].innerText:a.cells[ColumnID].innerHTML;
b = b.cells[ColumnID].innerText?b.cells[ColumnID].innerText:b.cells[ColumnID].innerHTML;
return -a.localeCompare(b);
}
for( i=0; i<rowsArr.length;i++)
{
thetable.appendChild(rowsArr[i]);
}
}
</script>
</head>
<body>
<table id="datatable">
<thead>
<tr>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',0,'number','asc');">注册日期<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',0,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',1,'char','asc');">省<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',1,'char','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',2,'number','asc');">PV<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',2,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',3,'number','asc');">IP数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',3,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',4,'number','asc');">一周内登陆次数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',4,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',5,'number','asc');">一平均在线时间<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',5,'number','desc');"></th>
<th><img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/2/l_66c9a059bd648346689ebef01388afc4.gif" onclick="sortColumn('databody',6,'number','asc');">一周内空间浏览次数<img src="http://b0.ac-images.cdnmyspace.cn/cnimages01/1/l_57660fa7cc99aa3c97e9204e3815e5fc.gif" onclick="sortColumn('databody',6,'number','desc');"></th>
</tr>
</thead>
<tbody id="databody">
<tr>
<td>20080404</td>
<td>山东</td>
<td>30</td>
<td>0</td>
<td>5</td>
<td>38.23</td>
<td>100</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>14</td>
<td>0</td>
<td>6</td>
<td>20.81</td>
<td>23</td>
</tr>
<tr>
<td>20080404</td>
<td>内蒙古</td>
<td>13</td>
<td>0</td>
<td>6</td>
<td>35.71</td>
<td>112</td>
</tr>
<tr>
<td>20080401</td>
<td>山东</td>
<td>12</td>
<td>0</td>
<td>4</td>
<td>19.98</td>
<td>7</td>
</tr>
<tr>
<td>20080406</td>
<td>网吧</td>
<td>11</td>
<td>0</td>
<td>6</td>
<td>39.80</td>
<td>92</td>
</tr>
<tr>
<td>20080406</td>
<td>内蒙古</td>
<td>9</td>
<td>0</td>
<td>7</td>
<td>35.85</td>
<td>18</td>
</tr>
<tr>
<td>20080404</td>
<td>内蒙古</td>
<td>9</td>
<td>0</td>
<td>4</td>
<td>31.24</td>
<td>29</td>
</tr>
<tr>
<td>20080404</td>
<td>黑龙江</td>
<td>8</td>
<td>0</td>
<td>7</td>
<td>12.91</td>
<td>55</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>5</td>
<td>9.87</td>
<td>4</td>
</tr>
<tr>
<td>20080403</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>5</td>
<td>36.27</td>
<td>18</td>
</tr>
<tr>
<td>20080402</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>4</td>
<td>18.57</td>
<td>18</td>
</tr>
<tr>
<td>20080406</td>
<td>山东</td>
<td>8</td>
<td>0</td>
<td>3</td>
<td>48.47</td>
<td>11</td>
</tr>
<tr>
<td>20080402</td>
<td>黑龙江</td>
<td>6</td>
<td>0</td>
<td>4</td>
<td>5.32</td>
<td>1</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>5</td>
<td>0</td>
<td>7</td>
<td>25.92</td>
<td>14</td>
</tr>
<tr>
<td>20080402</td>
<td>山东</td>
<td>5</td>
<td>0</td>
<td>4</td>
<td>7.71</td>
<td>1</td>
</tr>
<tr>
<td>20080404</td>
<td>山东</td>
<td>5</td>
<td>0</td>
<td>3</td>
<td>29.66</td>
<td>17</td>
</tr>
</tbody>
</table>
</body>
</html>
- 我的第二个JavaScript脚本--对table中的数据排序
- 用javascript对页面的table排序
- javaScript对table进行排序
- 用JavaScript 实现对Table内容的排序
- Javascript对table表格进行排序
- juqery对table的排序
- 用js对table数据排序
- js 对页面table数据排序
- 用js对table数据排序
- js 对页面table数据排序
- js 对页面table数据排序
- js 对页面table数据排序
- javascript 对json数据排序
- 我对JavaScript特性的3个理解
- 感谢第一个和第二个付费客户对我的信任
- JavaScript动态生成table中的数据
- 我的第二个blog
- 我的第二个HelloWrold.
- 浮点数相等比较和64位整数
- JavaScript面向对象特性实践一
- Action的配置属性及其含义
- 重定位的原理&实现
- 管理学经典定理汇粹
- 我的第二个JavaScript脚本--对table中的数据排序
- 我与西门子的面试全过程(一面+二面)_2008校园招聘_笔试与面试分享_UNUS.CN
- 如何简单的解决Oracle XDB与Tomcat等的8080端口的冲突!
- RO27 - RemObjects 3.0 SDK 综述
- css 冲突
- SQL Server中的几个方法和Transact SQL 常用语句以及函数
- 无用的石头和有用的砖头
- RO28 – 在COM中使用RemObjects SDK
- 移动BOSS3.0开发管理平台项目日志:4月14日