js怎么实现页面数据排序 要求table里的第一列不参加排序?

解决方案 »

  1.   

    用html做一张table , 我自己用js实现了排序功能, 要求,在排序的时候,第一列不动, 其他照样排序。
      

  2.   

    第一列用th,其他的用td
      

  3.   

    firstRow = table.querySelector('th');
    otherRows = table.querySelectorAll("td");//这是个节点集,你var array = Object.values(otherRows);,你遍历array就是了
      

  4.   

    function  convert(sValue, sDataType) {
            switch  (sDataType) {
                case   "int" :
                    return  parseInt(sValue);
                case   "float" :
                    return  parseFloat(sValue);
                case   "date" :
                    return   new  Date(Date.parse(sValue));
                default :
                    return  sValue.toString();
            }
        }
        function  generateCompareTRs(iCol, sDataType) {
            return   function  compareTRs(oTR1, oTR2) {
                vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
                vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);
                if  (vValue1 < vValue2) {
                    return  -1;
                }  else   if  (vValue1 > vValue2) {
                    return  1;
                }  else  {
                    return  0;
                }
            };
        }
        function  sortTable(sTableID, iCol, sDataType) {
            var  oTable = document.getElementById(sTableID);
            var  oTBody = oTable.tBodies[0];
            var  colDataRows = oTBody.rows;
            var  aTRs =  new  Array;
            for  (  var  i = 0; i < colDataRows.length; i++) {
                aTRs[i] = colDataRows[i];
               alert(document.getElementByTagName("th").innerHTML);
            }
        
            if  (oTable.sortCol == iCol) {
                aTRs.reverse();
            }  else  {
                aTRs.sort(generateCompareTRs(iCol, sDataType));
            }
            var  oFragment = document.createDocumentFragment();
            
           
          
            for  (  var  j = 0; j < aTRs.length; j++) {
            
                oFragment.appendChild(aTRs[j]);
         
            }
            oTBody.appendChild(oFragment);
            oTable.sortCol = iCol;
        }
      

  5.   

    我一直在用getElementById() 试着将排序前的第一列取出来, 一直报错。
      

  6.   

    就如上面所说,你可以后台返回json,而不是html,排序后动态组合表;这个dom操作少点。
    或者,你取出要排列的那一列单元格的数据排序,排好了相应的替换就行了。取特定单元格,用古老的children代替childNodes,
    table.tr.children[0],table.tr.children[1]
      

  7.   

    <tabel id="t">
    <tr><td>1</td>测试1<td></td><td>测试2</td></tr>
    <tr><td>2</td>测试3<td></td><td>测试4</td></tr>
    </table>
    var table = document.getElementById("t");
    var rows = table.children;
    var td1 = rows[0].children[0];
      

  8.   

        function  sortTable(sTableID, iCol, sDataType) {
            var  oTable = document.getElementById(sTableID);
            var  oTBody = oTable.tBodies[0];
            var  colDataRows = oTBody.rows;
            var  aTRs =  new  Array;
            var aTDs = [];
            for  (  var  i = 0; i < colDataRows.length; i++) {
                aTRs[i] = colDataRows[i];
                aTDs[i] = aTRs[i].cells[0];
               alert(document.getElementByTagName("th").innerHTML);
            }
        
            if  (oTable.sortCol == iCol) {
                aTRs.reverse();
            }  else  {
                aTRs.sort(generateCompareTRs(iCol, sDataType));
            }
            var  oFragment = document.createDocumentFragment();
            
           
          
            for  (  var  j = 0; j < aTRs.length; j++) {
            
                oFragment.appendChild(aTRs[j]);
                aTRs[j].insertBefore(aTDs[j], aTRs[j].cells[1]);
         
            }
            oTBody.appendChild(oFragment);
            oTable.sortCol = iCol;
        }
      

  9.   

    你很棒, 多谢你的思路。 
    aTRs[j].insertBefore(aTDs[j], aTRs[j].cells[1]);
    插入的是第二个数据。改成0就成功了, 
    多谢大家,结贴!~