默认方式排序的话, 是按 Unicode 的方式排序的, 在字母与数字来说排序是正确, 但是若是汉字的话, Unicode 与汉字拼音的顺序是不一样的, 所以排出来的序也是不对的, 解决的方法是碰到汉字时把 Unicode 转成 ASCII 码来做, 比如在JS里调用VBS里的 ASC() 函数等

解决方案 »

  1.   

    <style>
    tr {background-color: #FFFFFF; font-size: 10pt}
    </style><table id=tab border=0 cellspacing=1 cellpadding=0 width=600 bgcolor=#D4D0C8>
      <tr>
        <td>序号</td>
        <td>项目一</td>
        <td>项目二</td>
        <td>项目三</td>
        <td>项目四</td>
        <td>项目五</td>
      </tr>
      <tr>
        <td>1</td>
        <td>李白</td>
        <td>12.34</td>
        <td>Chinese</td>
        <td>padding-bottom</td>
        <td>TBODY</td>
      </tr>
      <tr>
        <td>2</td>
        <td>杜甫</td>
        <td>2918</td>
        <td>English</td>
        <td>border-left-width</td>
        <td>COLGROUP</td>
      </tr>
      <tr>
        <td>3</td>
        <td>白居意</td>
        <td>911</td>
        <td>America</td>
        <td>border-bottom</td>
        <td>FRAMESET</td>
      </tr>
      <tr>
        <td>4</td>
        <td>白求恩</td>
        <td>149.12</td>
        <td>Canada</td>
        <td>text-align</td>
        <td>VAR</td>
      </tr>
      <tr>
        <td>5</td>
        <td>李商隐</td>
        <td>79.812</td>
        <td>France</td>
        <td>list-style</td>
        <td>CAPTION</td>
      </tr>
      <tr>
        <td>6</td>
        <td>杜牧</td>
        <td>416.03</td>
        <td>Russia</td>
        <td>margin</td>
        <td>SUB</td>
      </tr>
    </table><table id=tab2 border=0 cellspacing=1 cellpadding=0 width=600 bgcolor=#D4D0C8>
      <tr style="background-color: menu">
        <td>序号</td>
        <td>项目一</td>
        <td>项目二</td>
        <td>项目三</td>
        <td>项目四</td>
        <td>项目五</td>
      </tr>
      <tr>
        <td>1</td>
        <td>李白</td>
        <td>12.34</td>
        <td>Chinese</td>
        <td>padding-bottom</td>
        <td>TBODY</td>
      </tr>
      <tr>
        <td>2</td>
        <td>杜甫</td>
        <td>2918</td>
        <td>English</td>
        <td>border-left-width</td>
        <td>COLGROUP</td>
      </tr>
      <tr>
        <td>3</td>
        <td>白居意</td>
        <td>911</td>
        <td>America</td>
        <td>border-bottom</td>
        <td>FRAMESET</td>
      </tr>
      <tr>
        <td>4</td>
        <td>白求恩</td>
        <td>149.12</td>
        <td>Canada</td>
        <td>text-align</td>
        <td>VAR</td>
      </tr>
      <tr>
        <td>5</td>
        <td>李商隐</td>
        <td>79.812</td>
        <td>France</td>
        <td>list-style</td>
        <td>CAPTION</td>
      </tr>
      <tr>
        <td>6</td>
        <td>杜牧</td>
        <td>416.03</td>
        <td>Russia</td>
        <td>margin</td>
        <td>SUB</td>
      </tr>
    </table><SCRIPT LANGUAGE="JavaScript"><!--
    var sortTable       = null;     //表格排序的构造对象function meizzSortTable()
    {
      this.IE = (window.navigator.appName=="Microsoft Internet Explorer");  this.tables = new Array();  //所有要被排序的 Table
      this.items  = new Array();  //当前排序的那列的内容
      this.heads  = new Array();
      this.numeric= false;        //指排序的内容是否为数字
      this.chinese= false;        //排序内容存在中文字符
      this.index  = null;         //当前正在排序的那个 Table 在表数组里的序号
      this.sortWay= true;         //为 false 时这倒排序
      this.flagId = "sortFlagButtonId";  this.add    = function(e)
      {
        if (!(e && e.tagName=="TABLE")){
          alert("对不起!你传入的对象不是 TABLE ,不能进行排序操作"); return false;}
        e.rows[0].className = "sortTableHead";
        var len = e.rows[0].cells.length;
        e.rows[0].className = "TableSort";
        var m = this.tables.length;
        for (var i=0; i<len; i++)
        {
          e.rows[0].cells[i].style.cssText = "border: 1px outset #D4D0C8; cursor: default";
          if(e.rows[0].cells[i].innerText.trim() != "")
            e.rows[0].cells[i].onclick = function(){sortTable.sortItemClick(this, m);}
        }
        this.tables[m] = e;
        this.heads[m] = null;
      }
      this.sortItemClick = function(e, m)
      {
        var td = searchObjByTagName(e, "TD");
        var tab= this.tables[m];
        this.sortWay = (this.heads[m] == td) ? !this.sortWay : true;
        this.heads[m] = td;
        var n  = td.cellIndex;
        this.items.length = 0;
        this.numeric  = true;
        this.chinese  = false;
        for (var i=1; i<tab.rows.length; i++)
        {
          var txt  = tab.rows[i].cells[n].innerText.trim();
          if ( this.numeric && isNaN(txt)) {this.numeric = false;}
          if (!this.chinese && /[^\x00-\xff]+/.test(txt)) this.chinese = true;
          this.items[this.items.length] = txt +"_"+ i;
        }
        this.sortFlag(this.sortWay, m);
        if (sortTable.chinese && !sortTable.IE)
        {
          alert("对不起,对表格的排序功能只适用于IE浏览器!");
          return false;
        }
        this.items = (this.sortWay) ? this.items.sort(this.condition) : this.items.sort(this.condition).reverse();
        this.moveCell(tab, this.items);
      }
      this.sortFlag = function(B, m)
      {
        var str = "<input type=button id='"+ this.flagId +""+ m +"'  align='absmiddle' "+
        " value='"+ (B?"▲":"▼") +"' title='"+ (B?"正":"倒") +"排序' disabled "+
        " style='font-size: 9pt; border:0; height: 12; background-color: transparent'>";
        var e  = getObjectById(this.flagId +""+ m); if(e) e.removeNode(true);
        this.heads[m].insertAdjacentHTML("beforeEnd", str);
      }
      this.asc = function(str)
      {
        try{ execScript("strAsc = ASC('"+ str +"')", "vbscript");}
        catch(e){window.status = "对不起!你的浏览器版本太低!不能支持排序!"; return false;}
        if(strAsc < 0) strAsc += 65535; return strAsc;
      }
      this.condition  = function(str1, str2)
      {
        var s1 = str1.substring(0, str1.lastIndexOf("_"));
        var s2 = str2.substring(0, str2.lastIndexOf("_"));
        if (sortTable.numeric) return(s1 - s2);
        else
        {
          var length = (s1.length > s2.length) ? s1.length : s2.length;
          for(var i=0; i<length; i++)
          {
            if(i==s1.length || i==s2.length) break;
            var n1 = (sortTable.chinese) ? sortTable.asc(s1.charAt(i)) : s1.charCodeAt(i);
            var n2 = (sortTable.chinese) ? sortTable.asc(s2.charAt(i)) : s2.charCodeAt(i);
            if(n1 != n2) return n1-n2;
          }
          return(s1.length - s2.length);
        }
      }
      this.moveCell = function(table, array)
      {
        var len = array.length, b = new Array();
        for(var i=0; i<array.length; i++) b[i] = parseFloat(array[i].match(/\d+$/));    for(var i=1; i<len; i++)
        {
          if(b[i-1] != i)
          {
            table.moveRow(b[i-1], i);
            for(var j=0; j<len; j++)
            {
              if(b[j]>=i && b[j]<b[i-1])
              b[j]++;
            }
            b[i-1] = i;
          }
        }
      }
    } sortTable = new meizzSortTable();function attachScripting()
    {
      sortTable.add(document.all.tab);
      sortTable.add(document.all.tab2);
    }
    window.attachEvent("onload", attachScripting);
    function getObjectById(id)
    {
      if (arguments.length == 0) return null;
      /*@cc_on @*/ /*@if (@_jscript_version>=3) return document.all(id); @end @*/
      if(window.navigator.appName=="Netscape" && parseInt(window.navigator.appVersion)>5)
      return document.getElementById(id);
      try {return document.getElementById(id);} catch(e){ return eval(id);}
    }
    String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g,"");}
    function searchObjByTagName(obj, tag)
    {
      while(obj!=null && typeof(obj.tagName) != "undefind")
      {
        if(obj.tagName == tag.toUpperCase()) return(obj);
        obj = obj.parentElement;
      }
      return null;
    }//--></SCRIPT>
      

  2.   

    <script language=javascript>
    function s1(a,b){return a-b}
    function s2(a,b){return b-a}
    var arr=[06,14,21,23,25,07,10,17,22,09,11,12,13,20,01,15,19,05,24,08,03,04,02,16,18]alert("升序:"+arr.sort(s1))
    alert("降序:"+arr.sort(s2))
    </script>