http://www.brainjar.com/dhtml/tablesort/demo.html

解决方案 »

  1.   

    for (var i = 1; i<sortedData.length; i++)
      

  2.   

    楼上的方法结果一样.to net_lover(孟子E章):
    我现在要做这个功能主要是为了插入另一个页面,更改那个页面的table.我不能把那个页面的table给换掉,这个页面只是我测试用的,所以希望你能帮我看看问题出在哪里.谢谢!
      

  3.   

    算法出错了
    xjdawu(左右互搏)的方法是正确的,每一轮你都少比较一次。
    把for (var i = 1; i<sortedData.length-1; i++)改成for (var i = 1; i<sortedData.length; i++)应该是可以的。请楼主自己验证。
      

  4.   

    楼上的有没有试过执行这个页面?
    我使用了你的方法一样不对,问题是执行第一遍时(点击key),alert(sortedData)结果是
    aaaer,aaafv,ebbv,erva
    点第二次时结果是
    erva,ebbv,aaafv,aaaer
    显示的table也相应地排序正确
    但第三次点击时结果是
    aaafv,aaaer,ebbv,erva (前两个结果不对)
    以后都是这样.
    但我把处理alert(sortedData)后的for循环去掉后,alert显示的结果不会这样,是正确的.
      

  5.   

    我当然验证过,但是好像没有办法重现你的问题,在我这里是正确的。
    <html>
    <head>
    <title>table sort test</title>
    </head>
    <script language=javascript>
    function onSortIconClicked()
    {
    //alert(document.all.sortIcon.src);
    var direction = "";

    if (document.all.sortIcon.src.indexOf( "downArrow.gif") != -1)
    {
    document.all.sortIcon.src="upArrow.gif";
    direction = "up";
    }else
    {
    document.all.sortIcon.src="downArrow.gif";
    direction = "down";
    }

    var tbl = document.getElementsByTagName("TABLE");
    var row  = tbl[0].rows;
    var value = "";
    var data = new Array();

    for (var i = 1; i< row.length; i++)
    {
    value = row[i].cells[0].innerText;
    data[i-1] = value;
    }

    var sortedData = sort(data, direction);

    alert(sortedData);//<-- 显示排序结果

    for (var i = 1; i<row.length; i++)
    {
    for (var j = 1; j<row.length; j++)
    {
    if (row[j].cells[0].innerText == sortedData[i])
    {
    var newRow = tbl[0].insertRow();
    var newCell = newRow.insertCell();
    newCell.innerText = row[j].cells[0].innerText;

    newCell = newRow.insertCell();
    newCell.innerText = row[j].cells[1].innerText;

    tbl[0].deleteRow(j);
    }
    }
    }}function sort(data, direction)
    {
    for (var i=1; i<data.length; i++)
    {
    for (var j = 0; j<data.length-i; j++)
    {
    if (direction == "up")
    {
    if (data[j] > data[j+1])
    {
    var temp = data[j];
    data[j] = data[j+1];
    data[j+1] = temp;
    }
    }

    if (direction == "down")
    {
    if (data[j] < data[j+1])
    {
    var temp = data[j];
    data[j] = data[j+1];
    data[j+1] = temp;
    }
    }
    }
    }

    return data; 
    }
    </script>
    <body>
    <table width="694" border=1>
    <tr>
    <td  bgcolor="#C0C0C0"><a href="javascript:onSortIconClicked()">key
    <img id="sortIcon" border="0" src="downArrow.gif" width="9" height="8" ></a></td>
    <td bgcolor="#C0C0C0">value</td>
    </tr>
    <tr>
    <td>aaafv</td>
    <td>vcccf</td>
    </tr>
    <tr>
    <td>aaaer</td>
    <td>bbbde</td>
    </tr>
    <tr>
    <td>erva</td>
    <td>errt</td>
    </tr>
    <tr>
    <td>ebbv</td>
    <td>q345t</td>
    </tr>
    </table>
    </body>
    </html>
    请楼主试试??