<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    備忘——javascript操作表格排序

    Posted on 2007-03-10 17:26 dennis 閱讀(6319) 評論(1)  編輯  收藏 所屬分類: web開發
    表格排序,一般的處理方法是傳遞排序的字段到后臺進行重新查詢并排序,javascript也可以做到簡單的表格排序,備忘代碼:
    ?????????? //類型轉換器,將列的字段類型轉換為可以排序的類型:String,int,float
    ????????????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();
    ????????????????
    ????????????????}
    ????????????}
    ????????????
    ????????????
    //排序函數產生器,iCol表示列索引,sDataType表示該列的數據類型
    ????????????function?generateCompareTRs(iCol,?sDataType)?{
    ????????
    ????????????????
    return??function?compareTRs(oTR1,?oTR2)?{
    ????????????????????????????
    var?vValue1?=?convert(oTR1.cells[iCol].firstChild.nodeValue,?sDataType);
    ????????????????????????????
    var?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];
    ????????????????}
    ?????????????????
    ????????????????
    //判斷最后一次排序的列是否與現在要進行排序的列相同,是的話,直接使用reverse()逆序
    ????????????????if?(oTable.sortCol?==?iCol)?{
    ????????????????????aTRs.reverse();
    ????????????????}?
    else?{
    ????????????????????
    //使用數組的sort方法,傳進排序函數
    ????????????????????aTRs.sort(generateCompareTRs(iCol,?sDataType));
    ????????????????}
    ????????
    ????????????????
    var?oFragment?=?document.createDocumentFragment();
    ????????????????
    for?(var?i=0;?i?<?aTRs.length;?i++)?{
    ????????????????????oFragment.appendChild(aTRs[i]);
    ????????????????}
    ???????
    ????????????????oTBody.appendChild(oFragment);
    ????????????????
    //記錄最后一次排序的列索引
    ????????????????oTable.sortCol?=?iCol;
    ????????????}

    完整例子:
    <html>
    ????
    <head>
    ????
    <title>Table?Sort?Example</title>
    ????????
    <script?type="text/javascript">
    ????????????
    ????????????
    //轉換器,將列的字段類型轉換為可以排序的類型:String,int,float
    ????????????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();
    ????????????????
    ????????????????}
    ????????????}
    ????????????
    ????????????
    //排序函數產生器,iCol表示列索引,sDataType表示該列的數據類型
    ????????????function?generateCompareTRs(iCol,?sDataType)?{
    ????????
    ????????????????
    return??function?compareTRs(oTR1,?oTR2)?{
    ????????????????????????????
    var?vValue1?=?convert(oTR1.cells[iCol].firstChild.nodeValue,?sDataType);
    ????????????????????????????
    var?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];
    ????????????????}
    ?????????????????
    ????????????????
    //判斷最后一次排序的列是否與現在要進行排序的列相同,是的話,直接使用reverse()逆序
    ????????????????if?(oTable.sortCol?==?iCol)?{
    ????????????????????aTRs.reverse();
    ????????????????}?
    else?{
    ????????????????????
    //使用數組的sort方法,傳進排序函數
    ????????????????????aTRs.sort(generateCompareTRs(iCol,?sDataType));
    ????????????????}
    ????????
    ????????????????
    var?oFragment?=?document.createDocumentFragment();
    ????????????????
    for?(var?i=0;?i?<?aTRs.length;?i++)?{
    ????????????????????oFragment.appendChild(aTRs[i]);
    ????????????????}
    ???????
    ????????????????oTBody.appendChild(oFragment);
    ????????????????
    //記錄最后一次排序的列索引
    ????????????????oTable.sortCol?=?iCol;
    ????????????}

    ????????
    </script>
    ????
    </head>
    ????
    <body>
    ????????
    <p>Click?on?the?table?header?to?sort?in?ascending?order.</p>
    ????????
    <table?border="1"?id="tblSort">
    ????????????
    <thead>
    ????????????????
    <tr>
    ????????????????????
    <th?onclick="sortTable('tblSort',?0)"?
    ????????????????????????style
    ="cursor:pointer">Last?Name</th>
    ????????????????????
    <th?onclick="sortTable('tblSort',?1)"?
    ????????????????????????style
    ="cursor:pointer">First?Name</th>
    ????????????????????
    <th?onclick="sortTable('tblSort',?2,?'date')"?
    ????????????????????????style
    ="cursor:pointer">Birthday</th>
    ????????????????????
    <th?onclick="sortTable('tblSort',?3,?'int')"?
    ????????????????????????style
    ="cursor:pointer">Siblings</th>
    ????????????????
    </tr>
    ????????????
    </thead>
    ????????????
    <tbody>
    ????????????????
    <tr>
    ????????????????????
    <td>Smith</td>
    ????????????????????
    <td>John</td>
    ????????????????????
    <td>7/12/1978</td>
    ????????????????????
    <td>2</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Johnson</td>
    ????????????????????
    <td>Betty</td>
    ????????????????????
    <td>10/15/1977</td>
    ????????????????????
    <td>4</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Henderson</td>
    ????????????????????
    <td>Nathan</td>
    ????????????????????
    <td>2/25/1949</td>
    ????????????????????
    <td>1</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Williams</td>
    ????????????????????
    <td>James</td>
    ????????????????????
    <td>7/8/1980</td>
    ????????????????????
    <td>4</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Gilliam</td>
    ????????????????????
    <td>Michael</td>
    ????????????????????
    <td>7/22/1949</td>
    ????????????????????
    <td>1</td>
    ????????????????
    </tr>
    ????????????????
    <tr>
    ????????????????????
    <td>Walker</td>
    ????????????????????
    <td>Matthew</td>
    ????????????????????
    <td>1/14/2000</td>
    ????????????????????
    <td>3</td>
    ????????????????
    </tr>
    ????????????
    </tbody>
    ????????
    </table>????????
    ????
    </body>
    </html>


    評論

    # re: 備忘——javascript操作表格排序  回復  更多評論   

    2012-03-15 15:43 by www
    這個連續使用兩次就會報錯,會使瀏覽器崩潰的
    主站蜘蛛池模板: 午夜亚洲福利在线老司机| 毛片免费视频播放| 亚洲av无码专区在线观看素人| 亚洲区精品久久一区二区三区| 91精品手机国产免费| 亚洲国语精品自产拍在线观看| a级男女仿爱免费视频| 亚洲AV无一区二区三区久久| 国产成人AV片无码免费| 久久久久久久亚洲Av无码 | 女人毛片a级大学毛片免费| 亚洲人成www在线播放| 精品久久免费视频| 自拍偷自拍亚洲精品播放| 亚洲av午夜精品一区二区三区 | 成在人线av无码免费高潮水| 超清首页国产亚洲丝袜| 黄网站免费在线观看| 亚洲色图黄色小说| 成人免费777777| 在线播放国产不卡免费视频| 亚洲级αV无码毛片久久精品| 香蕉免费一区二区三区| 亚洲国产精品乱码在线观看97| 成人性生活免费视频| 一级特黄a大片免费| 亚洲AV电影院在线观看| 可以免费看的卡一卡二| 粉色视频免费入口| 亚洲性猛交XXXX| 免费大片黄在线观看yw| 免费一级毛suv好看的国产网站 | 91亚洲精品第一综合不卡播放| 99精品国产免费久久久久久下载| 精品亚洲福利一区二区| 亚洲AV无码一区二区二三区入口 | 亚洲啪啪免费视频| 美女扒开尿口给男人爽免费视频 | 久久WWW色情成人免费观看| 美女黄色免费网站| 亚洲美女视频免费|