文件名:sortTable2.js/**
** 对任意一个表格进行排序之二: ** 作者:emu(ston) ** 使用:
在网页中定义表格的时候加入如下标记:
<TABLE sortable=true>
该网页即可排序。 可以指定一行为标题栏,按如下格式:
<TR sortLine=true >
如不指定则为表格第一行。 默认按照字母顺序排序,如某列需按数字排序,对应的标题栏要这样定义
<TD sortType="float">ddd</TD> ** 注意:
1 如果表格中存在tHead部分,sortLine行应该在thead中
2 如不指定sortLine,默认表格的第一行为sortLine
3 排序算法未经优化,在表格比较大的时候速度会比较慢(优化的算法呢?下回吧。)
4 这个版本的排序完全使用 innerHTML ,也许会安全一些,速度也许也会慢一些。*/
var tmptables = document.all.tags("table");
for (var i=0;i<tmptables.length;i++)
if (tmptables[i].sortable)
attachTable(tmptables[i])
var sortLine,sortCol;function tableToArray(tmptable)
{
var result = new Array();
if (tmptable.tHead == null)
{
for (var i=tmptable.firstChild.children.length-1;i>sortLine;i--)
{
var tmptr = tmptable.firstChild.children[i];//如果不存在thead的话就把tbody中在sortLine行之下的行排序
result[result.length] = tmptr.cloneNode(true);
}
}
else
{
for (var i=tmptable.children[1].children.length-1;i>-1;i--)
{
var tmptr =tmptable.children[1].children[i]; //如果存在thead的话则默认把tbody中的全部行排序
result[result.length] = tmptr.cloneNode(true);
}
}
return result;
}function sortArrayFloat(arg1,arg2) //根据指定的列按浮点数排序
{
if (parseFloat(arg1.children[sortCol].innerText) > parseFloat(arg2.children[sortCol].innerText)) return 1
else return -1
}
function sortArrayString(arg1,arg2) //根据指定的列按串排序
{
if (arg1.children[sortCol].innerText>arg2.children[sortCol].innerText) return 1
else return -1
}function arrayToTable(ar,tmptable)
{
if (tmptable.tHead == null)
{
tmptbody = tmptable.firstChild;//如果不存在thead的话就把tbody中在sortLine行之下的行排序
for (var i=tmptbody.children.length-1;i>sortLine;i--)
{
var tmptr =tmptbody.children[i];
for (var j=0;j<tmptr.children.length;j++ )
{
tmptr.children[j].innerHTML = ar[tmptbody.children.length-i-1].children[j].innerHTML
}
}
}
else
{
tmptbody = tmptable.children[1];
for (var i=tmptbody.children.length-1;i>-1;i--)
{
var tmptr =tmptbody.children[i];
for (var j=0;j<tmptr.children.length;j++ )
{
tmptr.children[j].innerHTML = ar[tmptbody.children.length-i-1].children[j].innerHTML
}
}
}
}function sortTable()
{ var elm = event.srcElement;
var tmptr = elm.parentNode;
tmptable = tmptr.parentNode.parentNode; for (var i=0;i<tmptr.children.length; i++)
{
if (tmptr.children[i] == elm )
break
}
sortCol = i;//获得被点击的列
sortLine = tmptable.sortLine;//获得被点击的行
var ar = tableToArray(tmptable);//把行转换为数组
if (elm.sortType == "float")
ar.sort(sortArrayFloat);//排序
else
ar.sort(sortArrayString);//排序 if (elm.reverse == true)
{
elm.reverse = false;
ar.reverse();
}
else
{
elm.reverse = true;
}
arrayToTable(ar,tmptable);
}function attachTable(tmptable)
// 为一个表格的一行添加事件
{
var line = 0;
for (var i=0;i<tmptable.firstChild.children.length ; i++)
if (tmptable.firstChild.children[i].sortLine)
line = i ;
var tds = tmptable.firstChild.children[line].children;
for (var i=0;i<tds.length;i++)
{
tds[i].attachEvent("onclick",sortTable);
tds[i].style.cursor="hand";
tds[i].style.fontWeight="bold"
}
tmptable.sortLine=line;
}
使用示范:<html>
<head>
<title></title>
</head>
<body>
<TABLE sortable=true>
<thead>
<TR>
<TD colspan=4>考试成绩</TD>
</TR>
<TR sortLine=true >
<TD>姓名</TD>
<TD sortType="float">语文</TD>
<TD sortType="float">数学</TD>
<TD sortType="float">英语</TD>
</TR>
</thead>
<tbody>
<TR>
<TD>aaa</TD>
<TD>65</TD>
<TD>60</TD>
<TD>87</TD>
</TR>
<TR>
<TD>bbb</TD>
<TD>75</TD>
<TD>60</TD>
<TD>85</TD>
</TR>
<TR>
<TD>ccc</TD>
<TD>55</TD>
<TD>74</TD>
<TD>73</TD>
</TR>
<TR>
<TD>ddd</TD>
<TD>95</TD>
<TD>90</TD>
<TD>100</TD>
</TR>
</tbody>
<tfoot>
<tr>
<td colspan=4 align=center style="font-size:15;color:red">
by emu(ston) 2002
</td>
</tr>
</tfoot>
</TABLE>
<BR>
<SCRIPT LANGUAGE="JavaScript" src="sortTable2.js"></SCRIPT>
</body>
</html>
** 对任意一个表格进行排序之二: ** 作者:emu(ston) ** 使用:
在网页中定义表格的时候加入如下标记:
<TABLE sortable=true>
该网页即可排序。 可以指定一行为标题栏,按如下格式:
<TR sortLine=true >
如不指定则为表格第一行。 默认按照字母顺序排序,如某列需按数字排序,对应的标题栏要这样定义
<TD sortType="float">ddd</TD> ** 注意:
1 如果表格中存在tHead部分,sortLine行应该在thead中
2 如不指定sortLine,默认表格的第一行为sortLine
3 排序算法未经优化,在表格比较大的时候速度会比较慢(优化的算法呢?下回吧。)
4 这个版本的排序完全使用 innerHTML ,也许会安全一些,速度也许也会慢一些。*/
var tmptables = document.all.tags("table");
for (var i=0;i<tmptables.length;i++)
if (tmptables[i].sortable)
attachTable(tmptables[i])
var sortLine,sortCol;function tableToArray(tmptable)
{
var result = new Array();
if (tmptable.tHead == null)
{
for (var i=tmptable.firstChild.children.length-1;i>sortLine;i--)
{
var tmptr = tmptable.firstChild.children[i];//如果不存在thead的话就把tbody中在sortLine行之下的行排序
result[result.length] = tmptr.cloneNode(true);
}
}
else
{
for (var i=tmptable.children[1].children.length-1;i>-1;i--)
{
var tmptr =tmptable.children[1].children[i]; //如果存在thead的话则默认把tbody中的全部行排序
result[result.length] = tmptr.cloneNode(true);
}
}
return result;
}function sortArrayFloat(arg1,arg2) //根据指定的列按浮点数排序
{
if (parseFloat(arg1.children[sortCol].innerText) > parseFloat(arg2.children[sortCol].innerText)) return 1
else return -1
}
function sortArrayString(arg1,arg2) //根据指定的列按串排序
{
if (arg1.children[sortCol].innerText>arg2.children[sortCol].innerText) return 1
else return -1
}function arrayToTable(ar,tmptable)
{
if (tmptable.tHead == null)
{
tmptbody = tmptable.firstChild;//如果不存在thead的话就把tbody中在sortLine行之下的行排序
for (var i=tmptbody.children.length-1;i>sortLine;i--)
{
var tmptr =tmptbody.children[i];
for (var j=0;j<tmptr.children.length;j++ )
{
tmptr.children[j].innerHTML = ar[tmptbody.children.length-i-1].children[j].innerHTML
}
}
}
else
{
tmptbody = tmptable.children[1];
for (var i=tmptbody.children.length-1;i>-1;i--)
{
var tmptr =tmptbody.children[i];
for (var j=0;j<tmptr.children.length;j++ )
{
tmptr.children[j].innerHTML = ar[tmptbody.children.length-i-1].children[j].innerHTML
}
}
}
}function sortTable()
{ var elm = event.srcElement;
var tmptr = elm.parentNode;
tmptable = tmptr.parentNode.parentNode; for (var i=0;i<tmptr.children.length; i++)
{
if (tmptr.children[i] == elm )
break
}
sortCol = i;//获得被点击的列
sortLine = tmptable.sortLine;//获得被点击的行
var ar = tableToArray(tmptable);//把行转换为数组
if (elm.sortType == "float")
ar.sort(sortArrayFloat);//排序
else
ar.sort(sortArrayString);//排序 if (elm.reverse == true)
{
elm.reverse = false;
ar.reverse();
}
else
{
elm.reverse = true;
}
arrayToTable(ar,tmptable);
}function attachTable(tmptable)
// 为一个表格的一行添加事件
{
var line = 0;
for (var i=0;i<tmptable.firstChild.children.length ; i++)
if (tmptable.firstChild.children[i].sortLine)
line = i ;
var tds = tmptable.firstChild.children[line].children;
for (var i=0;i<tds.length;i++)
{
tds[i].attachEvent("onclick",sortTable);
tds[i].style.cursor="hand";
tds[i].style.fontWeight="bold"
}
tmptable.sortLine=line;
}
使用示范:<html>
<head>
<title></title>
</head>
<body>
<TABLE sortable=true>
<thead>
<TR>
<TD colspan=4>考试成绩</TD>
</TR>
<TR sortLine=true >
<TD>姓名</TD>
<TD sortType="float">语文</TD>
<TD sortType="float">数学</TD>
<TD sortType="float">英语</TD>
</TR>
</thead>
<tbody>
<TR>
<TD>aaa</TD>
<TD>65</TD>
<TD>60</TD>
<TD>87</TD>
</TR>
<TR>
<TD>bbb</TD>
<TD>75</TD>
<TD>60</TD>
<TD>85</TD>
</TR>
<TR>
<TD>ccc</TD>
<TD>55</TD>
<TD>74</TD>
<TD>73</TD>
</TR>
<TR>
<TD>ddd</TD>
<TD>95</TD>
<TD>90</TD>
<TD>100</TD>
</TR>
</tbody>
<tfoot>
<tr>
<td colspan=4 align=center style="font-size:15;color:red">
by emu(ston) 2002
</td>
</tr>
</tfoot>
</TABLE>
<BR>
<SCRIPT LANGUAGE="JavaScript" src="sortTable2.js"></SCRIPT>
</body>
</html>
解决方案 »
- IE下,Javascript导致页面中gif卡死问题
- 经常在网上看到下面效果,就是不知道人家如何用JavaScript实现的?请大家告知一下,谢谢了!
- 第一次接触eval这个函数,太神奇了,所以搞不懂:p 大家一起来看看吧~~
- 有关判断问题紧急求助,在线等。
- 我想开一家网上购物的网站,请给意见
- 初次编写函数,不起作用,请帮忙看一下
- 如何激发关于 document 的事件,通过直接点击页面而不是点按钮或其它什么的来实现
- JScript怎样取得中文字符串的字节长度啊
- 求急!啊!
- (100分)WEBPAGE中调用ACTIVEX控件的问题。
- 百分向送!有西祠这种网页HTML编辑器的源代码?
- 超酷工具条,太长了分三次发(三)
for (var i=0;i<tmptables.length;i++)
if (tmptables[i].sortable)
attachTable(tmptables[i])
这个循环写成一个函数,在onload里面显式的调用。这样脚本就可以在文件的head里面引入了。
我喜欢
xml+xsl=(sort)=>xml+databinding
其实xslt基本上都是被我们当成一个HTML生成器的,不是吗?我并不是说html比xml好,我只是说,什么合用,就用什么。
<xml id=xsl></xml>
<xml id=data></xml>
<talbe datafld="#data"></table>
用脚本跟踪source,动不动就要执行data.XMLDocument.loadXML(source.transformNode(xsl.XMLDocument))
呵呵。。
xsl是用来排序用而已。
根据不同的排序,指定不同的xsl
data.XMLDocument.loadXML(source.XMLDocument.transformNode(xsl.XMLDocument))
我不是夜猫啦。。我每天4:00准时SLEEP的。
刚好赶上中午饭。
不过懒了,还是烧COFFEE算了。。把Java烧死。。
if(i%5)document.write("|");
else document.write("!");打印出来,将就以下,呵呵。
用CSS定义cm来打印。。
我最爱的哪个,不知道在哪里。
--------------
coffee效力过期了。。88
1. 一样是靠出卖身体为生
2. 吃青春饭,人老珠黄肯定混不下去
3. 越高级收入越高,当然中间人的抽头会更高
4. 生活没有规律以夜生活为主,如果需要,□晨也要加班
5. 名声越大,越容易受到青睐
6. 必须尽最大可能满足客户各种各样非正常的需求
7. 鼓励创新精神
8. 群聚程式师的地方称软体园区,妓女集中的地方叫红灯区
9. 流动性较大,正常情况下没有工会
10. 如果怀孕了,既不能做程式员,也不能做妓女
11. 都为了防病毒的问题而烦恼..
12. 当然,个中高手还专门以制毒传毒为乐
13. 一个是Plug & Play,一个是Plug $ Play
14. 工作状态相同工作时精神高度集中,最怕外界干扰,工作完毕身心放松,体会到一种不可替代的工作快乐!
15. 女孩子最好还是不要做这两个职业,但还是有很多女孩子做
16. 除非在转行以后,否则都不愿意结婚
17. 他们都痛恨"微软"