<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
    這個連續使用兩次就會報錯,會使瀏覽器崩潰的
    主站蜘蛛池模板: 国产亚洲精久久久久久无码77777| 免费高清小黄站在线观看| 亚洲国产中文v高清在线观看| 亚洲日韩精品国产一区二区三区| 青草草色A免费观看在线| 亚洲精品二三区伊人久久| 成人片黄网站A毛片免费| 亚洲午夜一区二区三区| 免费观看毛片视频| 美女啪啪网站又黄又免费| 亚洲av午夜精品一区二区三区| 日韩毛片在线免费观看| 亚洲伊人成无码综合网| 成人A片产无码免费视频在线观看| 亚洲成A人片777777| 777成影片免费观看| 亚洲中文字幕久久精品蜜桃| 国产精品免费一级在线观看| 免费无码国产在线观国内自拍中文字幕| 免费一级毛片在级播放| 久久久免费观成人影院| 亚洲av永久无码精品古装片| 亚洲一区免费视频| 亚洲精品天堂成人片AV在线播放 | 一级做a爰片性色毛片免费网站| 亚洲精品动漫人成3d在线| 免费看成人AA片无码视频吃奶| 亚洲男人天堂av| 成年女人毛片免费播放视频m| 无人视频在线观看免费播放影院| 亚洲人成网站在线播放vr| 精品无码免费专区毛片| 鲁死你资源站亚洲av| 国产V亚洲V天堂A无码| 手机在线看永久av片免费| 在线观看亚洲专区| 亚洲免费在线视频| 国产精品免费播放| 最近2018中文字幕免费视频| 亚洲精品色在线网站| 久久精品亚洲视频|