Heim  >  Artikel  >  Web-Frontend  >  js实现表格字段排序_javascript技巧

js实现表格字段排序_javascript技巧

WBOY
WBOYOriginal
2016-05-16 16:59:351164Durchsuche

1.比较函数生成器:

复制代码 代码如下:

/**
 * 比较函数生成器
 *
 * @param iCol
 *            数据行数
 * @param sDataType
 *            该行的数据类型
 * @return
 */
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              return  -1;
        }  else   if  (vValue1 > vValue2) {
             return  1;
        }  else  {
             return  0;
        }
    };
}

2.处理比较字符类型:
复制代码 代码如下:

/**
 * 处理排序的字段类型
 *
 * @param sValue
 *            字段值 默认为字符类型即比较ASCII码
 * @param sDataType
 *            字段类型 对于date只支持格式为mm/dd/yyyy或mmmm dd,yyyy(January 12,2004)
 * @return
 */
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();
    }
}

3.主函数:
复制代码 代码如下:

/**
 * 通过表头对表列进行排序
 *
 * @param sTableID
 *            要处理的表ID
 * @param iCol
 *            字段列id eg: 0 1 2 3 ...
 * @param sDataType
 *            该字段数据类型 int,float,date 缺省情况下当字符串处理
 */
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         aTRs[i] = colDataRows[i];
    }
     if  (oTable.sortCol == iCol) {
        aTRs.reverse();
    }  else  {
        aTRs.sort(generateCompareTRs(iCol, sDataType));
    }
     var  oFragment = document.createDocumentFragment();
     for  (  var  j = 0; j         oFragment.appendChild(aTRs[j]);
    }
    oTBody.appendChild(oFragment);
    oTable.sortCol = iCol;
}

将以上问代码封装到一个js文件中,在html页面中引用。

测试test.html:

复制代码 代码如下:


表列排序 title >
script >


    
        
             LastName th >
             Number th >
             Date th >
         tr >
     thead >
    
        
             A td >
             1 td >
             5/9/2008 td >
         tr >
        
             B td >
             3 td >
             6/9/2008 td >
         tr >
        
             D td >
             6 td >
             5/4/2008 td >
         tr >
        
             E td >
             -5 td >
             5/4/2007 td >
         tr >
        
             H td >
             34 td >
             5/8/2008 td >
         tr >
        
             C td >
             12 td >
             1/4/2018 td >
         tr >
     tbody >
table >
body >
html >
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn