Chinaunix

标题: 这段表格排序代码居然在IE下报错,在Firefox下没问题 [打印本页]

作者: nothing9    时间: 2009-11-04 11:20
标题: 这段表格排序代码居然在IE下报错,在Firefox下没问题
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);
}

作者: nothing9    时间: 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>

作者: zhoumiao    时间: 2009-11-04 11:32
报的什么错?可以下一个MS的javascript调试工具跟进去看的
作者: nothing9    时间: 2009-11-04 11:32
还有个问题,这段代码不能对中文字符串进行排序,哪位老师能帮忙修改一下?谢了先!

附件是代码源文件。

sort.zip

3.3 KB, 下载次数: 36


作者: nothing9    时间: 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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2