js排序时因为tbody中有2个TR,所以排序不成功,求大神帮忙处理下(已哭)

问题描述

js排序时因为tbody中有2个TR,所以排序不成功,求大神帮忙处理下(已哭)

JS:
/转换器,将列的字段类型转换为可以排序的类型:String,int,float

            function convert(sValue, sDataType) {           //(值,类型(int ,date ,float,String))
                switch(sDataType) {   //选择类型
                    case "int":
                        return parseInt(sValue);   //返回int型
                    case "float":
                        return parseFloat(sValue);   //返回float型
                    case "date":
                        return new Date(Date.parse(sValue));  //返回date型(日期)
                    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);
                if(oTable.rows.length<2){
                return false;
                }
                var oTBody = oTable.tBodies[1];

                var colDataRows = oTBody.getElementsByTagName('tr')[0].row;;
                alert(colDataRows.innerHTML);
                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;
            }

                    TBODY:
                    <tbody>

                                            <s:iterator value="#reportMapList" status="st">

                                                <tr <s:if test="#st.odd">class="info"</s:if><s:else>class="warning"</s:else>>
                                                    <td style="text-align: center;"><s:property value='sdate' /></td>
                                                    <td  style="text-align: center;font-size:12px;" >
                                                    <a onclick="showDetail(<s:property value='adid' />,<s:property value='sdate' />)" style="cursor: pointer;" ><s:property value='adname' /></a>
                                                    </td>
                                                    <td style="text-align: center;"><s:property value='pushu' /></td>
                                                    <td style="text-align: center;"><s:property value='djsu' /></td>
                                                    <td style="text-align: center;"><s:property value='xzcgu' /></td>
                                                    <td style="text-align: center;"><s:property value='xzsbu' /></td>
                                                    <td style="text-align: center;"><s:property value='azsu' /></td>
                                                    <td style="text-align: center;"><s:property value='md5u' /></td>
                                                    <td style="text-align: center;"><s:property value='xzsu' /></td>
                                                    <td style="text-align: center;"><s:property value='llqdku' /></td>
                                                    <td style="text-align: center;"><s:property value='zjdku' /></td>
                                                    <td style="text-align: center;"><s:property value='bmbppu' /></td>
                                                    <td style="text-align: center;"><s:property value='yhqxu' /></td>

                                                </tr>
                                                <tr id="operations_reportAd_reportAdList_table_tr_<s:property value='adid' />_<s:property value='sdate' />" style="display: none;">
                                                <td  colspan="13" >
                                                    <input type="hidden" value="0" id="operations_reportAd_reportAdList_table_tr_<s:property value='adid' />_<s:property value='sdate' />_hidden">
                                                    <div class="container" style="width:95%;padding-top:20px;padding-bottom:25px;">
                                                    <table  class="table table-bordered table-condensed table-hover" style="font-size:12px;">
                                                      <thead>
                                                        <tr>
                                                          <th>日期</th>
                                                          <th>广告词标题</th>
                                                          <th>广告形式</th>
                                                          <th>PUSH</th>
                                                          <th>点击数</th>
                                                          <th>下载成功数</th>
                                                          <th>下载失败数</th>
                                                          <th>安装数</th>
                                                          <th>MD5错误数</th>
                                                          <th>卸载数</th>
                                                          <th>浏览器打开</th>
                                                          <th>直接打开</th>
                                                          <th>包名错误数</th>
                                                          <th>用户取消数</th>

                                                        </tr>
                                                      </thead>
                                                      <tbody id="operations_reportAd_reportAdList_table_tr_<s:property value='adid' />_<s:property value='sdate' />_table_tbody">

                                                      </tbody>
                                                    </table>
                                                    </div>
                                                </td>
                                                </tr>
                                            </s:iterator>
                                        </tbody>

                    排序的行:
                        <tr>
                                        <th width="5%"  onClick="sortTable('operations_strategies_forciblyAdd_table',0,'int')">日期</th>
                                        <th width="13%">广告</th>
                                        <th width="7%"  onClick="sortTable('operations_strategies_forciblyAdd_table',2,'int')">PUSH</th

解决方案

帮你改了下结构,自己看下面的代码,showDetail函数也帮你修改过了,注意看代码注释,记得采纳

 <script>
    function convert(sValue, sDataType) {           //(值,类型(int ,date ,float,String))
        switch (sDataType) {   //选择类型
            case "int":
                return parseInt(sValue);   //返回int型
            case "float":
                return parseFloat(sValue);   //返回float型
            case "date":
                return new Date(Date.parse(sValue));  //返回date型(日期)
            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);

        if (oTable.rows.length < 2) {
            return false;
        }
        var oTBody = oTable.tBodies[1];

        var colDataRows = oTBody.getElementsByTagName('tr');

        var aTRs = new Array;

        //将所有列放入数组
        for (var i = 0; i < colDataRows.length; i++) {
            if (colDataRows[i].getAttribute('display') != null) aTRs[aTRs.length] = 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;
        //对详细列进行重新插入操作
        var trDetail;
        for (var i = 0; i < aTRs.length; i++) {
            trDetail = document.getElementById('rel' + aTRs[i].getAttribute('display'));
            console.log(trDetail);//获取详细的数据行
            oTBody.insertBefore(trDetail, aTRs[i]);//第一次插入,详细行被插入到排列好的指示行前面,所以还得执行一次下面的操作
            oTBody.insertBefore(aTRs[i], trDetail);
        }
    }
    function showDetail(a) {
        var tr = a.parentNode.parentNode, nextTR = document.getElementById('rel' + tr.getAttribute('display'));
        nextTR.style.display=nextTR.style.display=='none'?'':'none'
    }
</script>
               <table id="tb" border="1"><tr>
                                                    <td onclick="sortTable('tb',0)">sdate</td>
                                                    <td  style="text-align: center;font-size:12px;" >操作</td>
                                                    <td>pushu</td>
                                                    <td>djsu</td>
                                                    <td>xzcgu</td>
                                                    <td>xzsbu</td>
                                                    <td>azsu</td>
                                                    <td>md5u</td>
                                                    <td>xzsu</td>
                                                    <td>llqdku</td>
                                                    <td>zjdku</td>
                                                    <td>bmbppu</td>
                                                    <td>yhqxu</td>
                                          </tr>    <tbody>

                                                <tr display="1"><!-----新增display属性,和详细列关联起来------>
                                                    <td>sdate1</td>
                                                    <td  style="text-align: center;font-size:12px;" >
                                                    <a onclick="showDetail(this)" style="cursor: pointer;" >adname1</a>
                                                    </td>
                                                    <td>pushu</td>
                                                    <td>djsu</td>
                                                    <td>xzcgu</td>
                                                    <td>xzsbu</td>
                                                    <td>azsu</td>
                                                    <td>md5u</td>
                                                    <td>xzsu</td>
                                                    <td>llqdku</td>
                                                    <td>zjdku</td>
                                                    <td>bmbppu</td>
                                                    <td>yhqxu</td>

                                                </tr>
                                                <tr style="display: none;"  id="rel1"><!--注意id和显示列的display属性关系,要生成此类型的结构,其实就一个变量递增就行-->
                                                <td  colspan="13" >
                                                    <input type="hidden" value="0" id="operations_reportAd_reportAdList_table_tr_adid_sdate1_hidden">
                                                    <div class="container" style="width:95%;padding-top:20px;padding-bottom:25px;">
                                                    <table  class="table table-bordered table-condensed table-hover" style="font-size:12px;">
                                                      <thead>
                                                        <tr>
                                                          <th>日期1</th>
                                                          <th>广告词标题1</th>
                                                          <th>广告形式1</th>
                                                          <th>PUSH</th>
                                                          <th>点击数</th>
                                                          <th>下载成功数</th>
                                                          <th>下载失败数</th>
                                                          <th>安装数</th>
                                                          <th>MD5错误数</th>
                                                          <th>卸载数</th>
                                                          <th>浏览器打开</th>
                                                          <th>直接打开</th>
                                                          <th>包名错误数</th>
                                                          <th>用户取消数</th>

                                                        </tr>
                                                      </thead>
                                                      <tbody id="operations_reportAd_reportAdList_table_tr_adid_sdate1_table_tbody">

                                                      </tbody>
                                                    </table>
                                                    </div>
                                                </td>
                                                </tr>

                                                <tr  display="2">
                                                    <td>sdate2</td>
                                                    <td  style="text-align: center;font-size:12px;" >
                                                    <a onclick="showDetail(this)" style="cursor: pointer;" >adname2</a>
                                                    </td>
                                                    <td>pushu</td>
                                                    <td>djsu</td>
                                                    <td>xzcgu</td>
                                                    <td>xzsbu</td>
                                                    <td>azsu</td>
                                                    <td>md5u</td>
                                                    <td>xzsu</td>
                                                    <td>llqdku</td>
                                                    <td>zjdku</td>
                                                    <td>bmbppu</td>
                                                    <td>yhqxu</td>

                                                </tr>
                                                <tr style="display: none;" id="rel2"><!--注意id和显示列的display属性关系,要生成此类型的结构-->
                                                <td  colspan="13" >
                                                    <input type="hidden" value="0" id="Hidden1">
                                                    <div class="container" style="width:95%;padding-top:20px;padding-bottom:25px;">
                                                    <table  class="table table-bordered table-condensed table-hover" style="font-size:12px;">
                                                      <thead>
                                                        <tr>
                                                          <th>日期2</th>
                                                          <th>广告词标题2</th>
                                                          <th>广告形式2</th>
                                                          <th>PUSH</th>
                                                          <th>点击数</th>
                                                          <th>下载成功数</th>
                                                          <th>下载失败数</th>
                                                          <th>安装数</th>
                                                          <th>MD5错误数</th>
                                                          <th>卸载数</th>
                                                          <th>浏览器打开</th>
                                                          <th>直接打开</th>
                                                          <th>包名错误数</th>
                                                          <th>用户取消数</th>

                                                        </tr>
                                                      </thead>
                                                      <tbody id="Tbody1">

                                                      </tbody>
                                                    </table>
                                                    </div>
                                                </td>
                                                </tr>

                                        </tbody></table>

解决方案二:

排序直接从后台查询 时sql语句排序就可以流量,前台自己弄不科学

解决方案三:

解决方案四:

解决方案五:

排序直接从后台查询 时sql语句排序就可以流量,前台自己弄不科学

时间: 2024-10-28 09:01:57

js排序时因为tbody中有2个TR,所以排序不成功,求大神帮忙处理下(已哭)的相关文章

停止ajax请求-ajax异步处理时,想要停止后台处理该如何实现,求大神帮忙

问题描述 ajax异步处理时,想要停止后台处理该如何实现,求大神帮忙 js中有个方法 $.ajax({ //一个异步的方法,且很耗时 url:..., ... async:true, success : function(data){ ? ?//todo:..... ?} }) 在这个方法被调用的时候,我点击一个按钮,想跳转到其他页面(window.location.href = ".../a.html"),但是页面一直无法跳转 请问,在跳转时该如何停止ajax的请求,直接跳到下一页?

求大神帮忙使用netbeans写java连接数据库时Statemnt中没有executeQuery方法

问题描述 求大神帮忙使用netbeans写java连接数据库时Statemnt中没有executeQuery方法 我在使用的netbeans中做数据库连接的时候没有Statemnt中没有executeQuery方法但是有execute方法怎么办是JDK的问题还是netbeans问题?求大神帮助!!!! 解决方案 public interface Statement 中有executeQuery 在java.sql中; public class Statement 这里面是没有executeQue

byte-Byte[]转Bitmap时图片变花,求大神帮忙

问题描述 Byte[]转Bitmap时图片变花,求大神帮忙 Android写了一个相机,但是photo = BitmapFactory.decodeByteArray(data 0 data.length)时候图片变花了,求大神帮忙,急急急 解决方案 遇到过同样的问题,我的问题是在处理data[]数据转Bitmap后,将图片旋转了90°,后来连续拍照后,保存的图片看上去像有很多张重叠在一起的,后来找了很久,发现是旋转的问题: Matrix matrix = new Matrix(); matri

用exe4j生成exe时出错 求大神帮忙

问题描述 用exe4j生成exe时出错 求大神帮忙 java.lang.ExceptionInInitializerError at init.ContextFactory.getContext(ContextFactory.java:17) at window.ExitDialog.(ExitDialog.java:38) at window.ExitDialog.main(ExitDialog.java:96) at sun.reflect.NativeMethodAccessorImpl.

android webview加载服务器上js自动轮播图片不显示问题,求大神帮忙

问题描述 android webview加载服务器上js自动轮播图片不显示问题,求大神帮忙 这个是手机版网站地址:m.daxuepai.com.cn 正常打开首页应该有轮播图片,如下图: 轮播功能是做web前端的人用js写的. 以下是我android中的代码,主要就是用webview加载了相应地址的资源,但是我加载了后那个轮播图就没有显示,代码如下: package com.example.testwebkit; import android.app.Activity; import andro

关于js闭包的疑问,求大神帮忙

问题描述 关于js闭包的疑问,求大神帮忙 function createFunction(){ var result = new Array(); for(var i=0;i<10;i++){ result[i]=function(){ return i; }; } return result; }; alert(createFunction());为什么输出是function(){return i;}这个闭包访问不到外包的函数的变量i? 解决方案 alert(createFunction()[

client发的请求接收返回信息时用send来接收,其余的由receive来接收,怎么改?求大神帮忙

问题描述 client发的请求接收返回信息时用send来接收,其余的由receive来接收,怎么改?求大神帮忙 sever的请求都友client的receive来接收,client发的请求接收返回信息时用send来接收,怎么改下?求大神帮忙,我只会大概写了下代码,菜鸟急需用! package test; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; impo

js var 判断求大神帮忙

问题描述 js var 判断求大神帮忙 var q = Ext.getCmp(""itemasset"").getValue(); var w = Ext.getCmp(""itemassetleader"").getValue(); q的值是12 w的值是12345 这些值是获取到可变的 如何去取他们之中相同的值 解决方案 for遍历.. var q='129' var w='12345' var arr1 = q.spli

gcc-GCC编译时 链接阶段未指定正确的库文件 请大神帮忙看下

问题描述 GCC编译时 链接阶段未指定正确的库文件 请大神帮忙看下 解决方案 头文件有正确包含么?函数名拼写正确么?没找到这个函数. 解决方案二: 你的函数库文件没有link,你需要编译的时候通过-L来指定对应的lib 解决方案三: 我在做linphone 然后就出现问题了