是浏览器端的<table>的列里的中文排序么?

解决方案 »

  1.   

    先给你一个汉字按照拼音排序的简单的例子  <script   src=GB2312.js></script>   //这个是汉字字库以及方法,按拼音顺序
      <script   language=javascript>
    var arr1=new Array(["实用",6,"abc"],["编程",5,"abcd"],["技术",8,"bcd"],["实战",4,"cde"],["精通",2,"efg"],["教程",-9,""]);
    function mysort2007(arr,sorttype,colmnindex)
    {
     switch(sorttype)
     {
     case 1://汉字排序
      function spellSort(a,b){
      var i,p,q,l=strGB.length;   
      p=0;for(i=a[colmnindex].length;i>0;i--)p=p/l+strGB.indexOf(a[colmnindex].substr(i-1,1))   
      q=0;for(i=b[colmnindex].length;i>0;i--)q=q/l+strGB.indexOf(b[colmnindex].substr(i-1,1))   
      return p-q;   
      }
      arr.sort(spellSort);
      break;
     case 2://数值排序
      function valueSort(a,b){
      if(parseFloat(a[colmnindex])==parseFloat(b[colmnindex])) return 0;
      else if(parseFloat(a[colmnindex])>parseFloat(b[colmnindex])) return 1;
      else return -1;
      }
      arr.sort(valueSort);
      break;
     case 3://字符串排序
      function stringSort(a,b){
      return a[colmnindex].localeCompare(b[colmnindex]);
      }
      arr.sort(stringSort);
      break;
      }
      alert(arr);
    }
    mysort2007(arr1,1,0);
    mysort2007(arr1,2,1);
    mysort2007(arr1,3,2);
      </script>//----------
    GB2312.jsvar strGB="啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋
    省略,这个可以下载到的,有些大,发不了
    function UrlEncode(str){
    /*********qiushuiwuhen(2002-9-16)********/
    var i,c,p,q,ret="",strSpecial="!\"#$%&'()*+,/:;<=>?@[\]^`{|}~%";
    for(i=0;i<str.length;i++){
    if(str.charCodeAt(i)>=0x4e00){
    var p=strGB.indexOf(str.charAt(i));
    if(p>=0){
    q=p%94;
    p=(p-q)/94;
    ret+=("%"+(0xB0+p).toString(16)+"%"+(0xA1+q).toString(16)).toUpperCase();
    }
    }
    else{
    c=str.charAt(i);
    if(c==" ")
    ret+="+";
    else if(strSpecial.indexOf(c)!=-1)
    ret+="%"+str.charCodeAt(i).toString(16);
    else
    ret+=c;
    }
    }
    return ret;
    }function getSpell(str,sp){
    /*********qiushuiwuhen(2002-9-16)********/
    var i,c,t,p,ret="";
    if(sp==null)sp="";
    for(i=0;i<str.length;i++){
    if(str.charCodeAt(i)>=0x4e00){
    p=strGB.indexOf(str.charAt(i));
    if(p>-1&&p<3755){
    for(t=qswhSpell.length-1;t>0;t=t-2)if(qswhSpell[t]<=p)break;
    if(t>0)ret+=qswhSpell[t-1]+sp;
    }
    }
    }
    return ret.substr(0,ret.length-sp.length);
    }
      

  2.   

    通常汉字排序都是用上面这个字库排序的但是,如果不用这个字库也可以,事实上,我们如果都处在中文环境下的话(绝大部分情况,除非使用其他语系的计算机),用localeCompare这个函数,可以取代那个庞大的函数库。我的解决办法是,把页面里的表格里的元素,取出,存放在一个二维数组中利用数组自身的sort方法来完成排序(这就省却了您自己用for,while自己构造排序)需要说明的是,sort方法的参数为您指定的排序法则,这个排序法则是以一个函数形式出现,我们需要做的就是设计这个函数
    我给出我自己实现排序的代码,columnIndex是列序号,sortType为排序类型,sortFlag排序是升序还是降序
    var clientSort=function(columnIndex,sortType,sortFlag){
    //alert("before sort:"+tempArray)
    //alert("col:"+columnIndex);
    //alert("sort:"+sortType);
    //alert("flag:"+sortFlag);
    if(sortType=="1"){//字符串排序
    function stringSort(a,b){
    return a[columnIndex].localeCompare(b[columnIndex])*sortFlag;
    }
    tempArray.sort(stringSort);
    } else if(sortType=="2"){//数值排序
    function floatSort(a,b){
       if(parseFloat(a[columnIndex])==parseFloat(b[columnIndex])) return 0;
       else if(parseFloat(a[columnIndex])>parseFloat(b[columnIndex])) return sortFlag;
       else return -1*sortFlag;
       }
    tempArray.sort(floatSort);
    } else {
    alert("您指定的sortType非法!");
    }
    var rowCount=tableBody.childNodes.length;
    //alert("after sort:"+tempArray)
    for(var i=0;i<rowCount;i++){
    tableBody.appendChild(tempArray[i][tempArray[i].length-1]);

    }
      

  3.   

    对。
    是表格里数据是中文的。
    mihaisheng
    你的这个我试试看,
    在此先谢过
      

  4.   

    这是把表格放入数组的函数
    this.fillArray=function(){
    var rowCount=tableBody.childNodes.length;
    for(var i=0;i<rowCount;i++){
    var columnCount=tableBody.childNodes[i].childNodes.length;
    tempArray[i]=new Array();

    for(var j=0;j<columnCount;j++){
    //alert(tableBody.childNodes[i].childNodes[j].innerHTML);
    tempArray[i][j]=tableBody.childNodes[i].childNodes[j].innerText
    }
    tempArray[i][columnCount]=tableBody.childNodes[i];
    }
    alert(tempArray);
    //contextChanged=false;
    }
    这个二维数组的每一个元素对应表格的每一个单元格的内容,但需要注意的是,这个二维数组会多出来一列,这一列存放的是表格的每一行对应的对象。这样做的好处在于,在表格内容不变的情况下,第二次排序的时候,就不必重新填充二维数组,数组中最后一列在排序过后,也恰好是表格应有的顺序。
      

  5.   

    多谢mihaisheng了
    你的方法我试了。
    对于多音字好像就不大好使了。比如说“重庆”。
    最近忙的没有及时过来看帖。实在不好意思。
    今天把帖给结了。
    但是遗留了一个问题。
    问题是:如果现在表格中内容是不确定的,(不知道是中文还是英文,如果两者都有的话,好像也有点小问题,我也在想办法解决这个。不过没有什么思路,改天还得请教你。)
    用什么方式解决(如何兼容的问题)。
      

  6.   

      $('tbody').sortable({cursor:"move", opacity:"0.7", axis:'y'});
                function moveSwap() {
                    var newToArray = $('tbody').sortable('toArray');
                 
                    $.each(newToArray, function (i) {
                        if (i == 0) {
                            $('#' + newToArray[i]).find('.up').addClass("up_no").removeClass("up_c");
                            $('#' + newToArray[i]).find('.down').addClass("down_c").removeClass("down_no");
                        }
                        else if (i == newToArray.length - 1) {
                            $('#' + newToArray[newToArray.length - 1]).find('.down').addClass("down_no").removeClass("down_c");
                            $('#' + newToArray[newToArray.length - 1]).find('.up').addClass("up_c").removeClass("up_no");
                        }
                        else {
                            $('#' + newToArray[i]).find('.down').addClass("down_c").removeClass("down_no");
                            $('#' + newToArray[i]).find('.up').addClass("up_c").removeClass("up_no");
                        }
                    });
                }            /* 拖动排序停止 */
                $('tbody').sortable({stop:function (e, ui) {
                    moveSwap();
                }});
                function udSwap() {
                    var newToArray = $('tbody').sortable('toArray');
                    $.each(newToArray, function (i) {
                        if (newToArray.length == 1) {
                            $('#' + newToArray[0]).find('.down').addClass('down_c').removeClass('down_no');
                            $('#' + newToArray[0]).find('.up').addClass("up_c").removeClass('up_no');
                        } else if (newToArray.length == 2) {
                            $('#' + newToArray[0]).find('.down').removeClass("down_no").addClass('down_c');
                            $('#' + newToArray[0]).find('.up').addClass("up_no").addClass('up_c');
                            $('#' + newToArray[1]).find('.up').addClass("up_c").removeClass('up_no');
                            $('#' + newToArray[1]).find('.down').removeClass("down_c").addClass('down_no');
                        } else if (i == 0) {
                            $('#' + newToArray[i]).find('.up').addClass("up_no").removeClass('up_c');
                            $('#' + newToArray[i]).find('.down').addClass("down_c").removeClass('down_no');
                        }
                        else if (i == newToArray.length - 1) {
                            $('#' + newToArray[i]).find('.down').addClass("down_no").removeClass('down_c');
                            $('#' + newToArray[i]).find('.up').addClass("up_c").removeClass('up_no');
                        }
                        else {
                            $('#' + newToArray[i]).find('.down').removeClass("down_no").addClass('down_c');
                            $('#' + newToArray[i]).find('.up').removeClass("up_no").addClass('up_c');
                        }
                    });
                }
                /* 上移 */
                $('.up').click(
                    function () {
                        $(this).parents("tr").prev().before($(this).parents("tr"));
                        udSwap();
                    }
                );
                /* 下移 */
                $('.down').click(
                    function () {
                        $(this).parents("tr").next().after($(this).parents("tr"));
                       
                        udSwap();
                    }
                );
                /* 执行排序 */
                udSwap();        }