只有当b[j]=b[i-1]才不用从新调整,或者就要调整其前后位置啊。

解决方案 »

  1.   

    表格排序的函数,
    function sortTableHandle(table, n)  //参数:表格对象,排序列(第0行单元格)
    {
    //function String.prototype.trim() {return this.replace(/(^\s*)|(\s*$)/g,"");}
    function getAsc(str)
    {
    try{ execScript("strAsc = ASC('"+ str +"')", "vbscript");}
    catch(e){alert("对不起!你的浏览器版本太低!不能支持排序!"); return false;}

    if(strAsc < 0)  strAsc += 65535;
    return strAsc;
    }
    var e = window.event.srcElement;
    TableSortCell = e;
    var td  = new Array(), a;
    //a中是单列重排后的顺序数组,包含了原来单元格和次序
    for(var i=1; i<table.rows.length; i++) 
    {
    td[i-1] = table.rows[i].cells[n].innerText.trim() + "_"+ i;
    }
    if(TableSortFlag) a = td.sort(sortCondition);
    else     a = td.sort().reverse();
    var b = new Array();
    //b中只包含新的各行对应原来的第几行。
    for(var i=0; i<td.length; i++)
    b[i] = parseInt(td[i].substr(td[i].lastIndexOf("_")+1));
    var length = a.length;
    for(var i=1; i<length; i++)
    {
       if(b[i-1] != i)
       {
          table.moveRow(b[i-1], i);//move(source,target)
          for(var j=0; j<length; j++)    //重新调整
          {
    if(b[j]>=i && b[j]<b[i-1])   //????????????????????????
    b[j]++;                      //?????????????????????????
          }
         b[i-1] = i;
       }
    }
      

  2.   

    俺现在知道了,当时误解了moveRow这个行数,以为是两个行交换,其实moveRow除了两个参数涉及到的行之外,还会影响到其它行。