免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2286 | 回复: 4
打印 上一主题 下一主题

这段表格排序代码居然在IE下报错,在Firefox下没问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-04 11:20 |只看该作者 |倒序浏览
var dom = (document.getElementsByTagName) ? true : false;
var ie5 = (document.getElementsByTagName && document.all) ? true : false;
var arrowUp, arrowDown;
if (ie5 || dom)
 initSortTable();
function initSortTable() {
 arrowUp = document.createElement("SPAN");
 var tn = document.createTextNode("↓");
 arrowUp.appendChild(tn);
 arrowUp.className = "arrow";
 arrowDown = document.createElement("SPAN");
 var tn = document.createTextNode("↑");
 arrowDown.appendChild(tn);
 arrowDown.className = "arrow";
}

function sortTable(tableNode, nCol, bDesc, sType) {
 var tBody = tableNode.tBodies[0];
 var trs = tBody.rows;
 var a = new Array();
 
&nbsp;for (var i=0; i<trs.length; i++) {
&nbsp;&nbsp;a[i] = trs[i];
&nbsp;}
&nbsp;
&nbsp;a.sort(compareByColumn(nCol,bDesc,sType));
&nbsp;
&nbsp;for (var i=0; i<a.length; i++) {
&nbsp;&nbsp;tBody.appendChild(a[i]);
&nbsp;}
}
function CaseInsensitiveString(s) {
&nbsp;return String(s).toUpperCase();
}
function parseDate(s) {
&nbsp;return Date.parse(s.replace(/-/g, '/'));
}
function toNumber(s) {
&nbsp;&nbsp;&nbsp;&nbsp;return Number(s.replace(/[^0-9.]/g, ""));
}
function compareByColumn(nCol, bDescending, sType) {
&nbsp;var c = nCol;
&nbsp;var d = bDescending;
&nbsp;
&nbsp;var fTypeCast = String;
&nbsp;
&nbsp;if (sType == "Number")
&nbsp;&nbsp;fTypeCast = Number;
&nbsp;else if (sType == "Date")
&nbsp;&nbsp;fTypeCast = parseDate;
&nbsp;else if (sType == "CaseInsensitiveString")
&nbsp;&nbsp;fTypeCast = CaseInsensitiveString;
&nbsp;return function (n1, n2) {
&nbsp;&nbsp;if (fTypeCast(getInnerText(n1.cells[c])) < fTypeCast(getInnerText(n2.cells[c])))
&nbsp;&nbsp;&nbsp;return d ? -1 : +1;
&nbsp;&nbsp;if (fTypeCast(getInnerText(n1.cells[c])) > fTypeCast(getInnerText(n2.cells[c])))
&nbsp;&nbsp;&nbsp;return d ? +1 : -1;
&nbsp;&nbsp;return 0;
&nbsp;};
}

function sortColumn(e) {
&nbsp;var tmp, el, tHeadParent;
&nbsp;if (ie5)
&nbsp;&nbsp;tmp = e.srcElement;
&nbsp;else if (dom)
&nbsp;&nbsp;tmp = e.target;
&nbsp;tHeadParent = getParent(tmp, "THEAD");
&nbsp;el = getParent(tmp, "TD");
&nbsp;if (tHeadParent == null)
&nbsp;&nbsp;return;
&nbsp;&nbsp;
&nbsp;if (el != null) {
&nbsp;&nbsp;var p = el.parentNode;
&nbsp;&nbsp;var i;
&nbsp;&nbsp;if (el._descending) // catch the null

&nbsp;&nbsp;&nbsp;el._descending = false;
&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;el._descending = true;
&nbsp;&nbsp;
&nbsp;&nbsp;if (tHeadParent.arrow != null) {
&nbsp;&nbsp;&nbsp;if (tHeadParent.arrow.parentNode != el) {
&nbsp;&nbsp;&nbsp;&nbsp;tHeadParent.arrow.parentNode._descending = null;   
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;tHeadParent.arrow.parentNode.removeChild(tHeadParent.arrow);
&nbsp;&nbsp;}
&nbsp;&nbsp;if (el._descending)
&nbsp;&nbsp;&nbsp;tHeadParent.arrow = arrowDown.cloneNode(true);
&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;tHeadParent.arrow = arrowUp.cloneNode(true);
&nbsp;&nbsp;el.appendChild(tHeadParent.arrow);
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;// get the index of the td

&nbsp;&nbsp;for (i=0; i<p.cells.length; i++) {
&nbsp;&nbsp;&nbsp;if (p.cells[i] == el) break;
&nbsp;&nbsp;}
&nbsp;&nbsp;var table = getParent(el, "TABLE");
&nbsp;&nbsp;// can't fail

&nbsp;&nbsp;
&nbsp;&nbsp;sortTable(table,i,el._descending, el.getAttribute("type"));
&nbsp;}
}

function getInnerText(el) {
&nbsp;if (ie5) return el.innerText; //Not needed but it is faster

&nbsp;
&nbsp;var str = "";
&nbsp;
&nbsp;for (var i=0; i<el.childNodes.length; i++) {
&nbsp;&nbsp;switch (el.childNodes.item(i).nodeType) {
&nbsp;&nbsp;&nbsp;case 1: //ELEMENT_NODE

&nbsp;&nbsp;&nbsp;&nbsp;str += getInnerText(el.childNodes.item(i));
&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;&nbsp;case 3: //TEXT_NODE

&nbsp;&nbsp;&nbsp;&nbsp;str += el.childNodes.item(i).nodeValue;
&nbsp;&nbsp;&nbsp;&nbsp;break;
&nbsp;&nbsp;}
&nbsp;&nbsp;
&nbsp;}
&nbsp;
&nbsp;return str;
}
function getParent(el, pTagName) {
&nbsp;if (el == null) return null;
&nbsp;else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
&nbsp;&nbsp;return el;
&nbsp;else
&nbsp;&nbsp;return getParent(el.parentNode, pTagName);
}

论坛徽章:
0
2 [报告]
发表于 2009-11-04 11:22 |只看该作者
<script language="javascript" src="sort.js"></script>

<div class="mainbox">
<table onclick="sortColumn(event)" align="center" bgcolor="#03c" border="0" cellpadding="0" cellspacing="1" width="728">
<thead>
  <tr bgcolor="#ffffff">
    <td align="center" height="18"><a href="#" title="按车次排序">车次</td>
    <td align="center" height="18"><a href="#" title="按车次排序">类型</td>
    <td align="center" height="18"><a href="#" title="按始发站排序">始发站</td>
    <td align="center" height="18"><a href="#" title="按始发时间排序">始发时间</td>
    <td align="center" height="18"><a href="#" title="按到站时间排序">到站时间</td>
    <td align="center" height="18"><a href="#" title="按查询站排序">查询站</td>
    <td align="center" height="18"><a href="#" title="按开车时间排序">开车时间</td>
    <td align="center" height="18"><a href="#" title="按终点站排序">终点站</td>
    <td align="center" height="18"><a href="#" title="按终到时间排序">终到时间</td>
  </tr>
</thead>

<tbody>
  <tr onmouseover="this.bgColor='#eeeeee';" onmouseout="this.bgColor='#ffffff';" bgcolor="#ffffff">
    <td align="center" height="18">K445/K448</td>
    <td align="center" height="18">空调快速</td>
    <td align="center" height="18">西安</td>
    <td align="center" height="18">22:48</td>
    <td align="center" height="18">12:40</td>
    <td align="center" height="18">麻城</td>
    <td align="center" height="18">12:42</td>
    <td align="center" height="18">深圳</td>
    <td align="center" height="18">04:50</td>
  </tr>

  <tr onmouseover="this.bgColor='#eeeeee';" onmouseout="this.bgColor='#ffffff';" bgcolor="#ffffff">
    <td align="center" height="18">K105</td>
    <td align="center" height="18">空调快速</td>
    <td align="center" height="18">北京西</td>
    <td align="center" height="18">23:50</td>
    <td align="center" height="18">11:58</td>
    <td align="center" height="18">麻城</td>
    <td align="center" height="18">12:00</td>
    <td align="center" height="18">深圳</td>
    <td align="center" height="18">05:02</td>
  </tr>

  <tr onmouseover="this.bgColor='#eeeeee';" onmouseout="this.bgColor='#ffffff';" bgcolor="#ffffff">
    <td align="center" height="18">1335/1338</td>
    <td align="center" height="18">普快</td>
    <td align="center" height="18">南宁</td>
    <td align="center" height="18">23:50</td>
    <td align="center" height="18">07:21</td>
    <td align="center" height="18">麻城</td>
    <td align="center" height="18">07:35</td>
    <td align="center" height="18">青岛</td>
    <td align="center" height="18">05:00</td>
  </tr>
</tbody>
</table>
</div>

论坛徽章:
13
巨蟹座
日期:2013-10-21 16:01:452015亚冠之全北现代
日期:2015-05-14 11:52:492015年亚洲杯之巴勒斯坦
日期:2015-04-27 08:04:252015年亚洲杯之朝鲜
日期:2015-03-11 18:01:112015年迎新春徽章
日期:2015-03-04 09:48:00摩羯座
日期:2014-12-16 12:22:23子鼠
日期:2014-08-08 15:47:44狮子座
日期:2014-07-28 20:37:15寅虎
日期:2014-06-12 12:09:08巨蟹座
日期:2014-03-18 08:41:18戌狗
日期:2013-12-05 10:15:58巨蟹座
日期:2013-11-08 10:24:51
3 [报告]
发表于 2009-11-04 11:32 |只看该作者
报的什么错?可以下一个MS的javascript调试工具跟进去看的

论坛徽章:
0
4 [报告]
发表于 2009-11-04 11:32 |只看该作者
还有个问题,这段代码不能对中文字符串进行排序,哪位老师能帮忙修改一下?谢了先!

附件是代码源文件。

sort.zip

3.3 KB, 下载次数: 36

论坛徽章:
0
5 [报告]
发表于 2009-11-04 11:34 |只看该作者
网页错误详细信息

用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)
时间戳: Wed, 4 Nov 2009 03:33:17 UTC

消息: 无效字符
行: 1
字符: 1
代码: 0
URI: file:///E:/sort/sort.js
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP