假设我页面有下面的div<div class="test" name='1'>
    <div class="test">a</div>    //嵌套的div没有name属性
</div>
<div class="test" name='2'>b</div>
<div class="test" name='3'>c</div>
<div class="test" name='5'>d</div>
<div class="test" name='7'>e</div>
<div class="test" name='4'>f</div>
<div class="test" name='8'>g</div>此时的name是乱序的,我想让他显示的时候是按name从大到小的顺序显示的
应该用什么方法?
最好能带上备注,因为是初学者

解决方案 »

  1.   


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
                var divTestJQ = $("#divTest"); //取得容器对象
                var divJQ = $(">div.test", divTestJQ); //取容器需要重排的对象
                var EntityList = []; //定义一个数组用于存放要排序的对象
                divJQ.each(function () {
                    var thisJQ = $(this);
                    EntityList.push({ Name: parseInt(thisJQ.attr("name"), 10), JQ: thisJQ }); //把要排序的对象和排序的值一起放到一个新的对象里,并存入到数组
                });
                EntityList.sort(function (a, b) { //利用数组的排序方法重新排序对象
                    return b.Name - a.Name; //从大到小
                    //return a.Name - b.Name; //从小到大
                });
                for (var i = 0; i < EntityList.length; i++) {
                    EntityList[i].JQ.appendTo(divTestJQ); //把排序完的对象重新插入到容器对象
                };
            });
        </script>
    </head>
    <body>
        <div id="divTest">
            <div class="test" name='1'>
                <div class="test">
                    a</div>
                //嵌套的div没有name属性
            </div>
            <div class="test" name='2'>
                b</div>
            <div class="test" name='3'>
                c</div>
            <div class="test" name='5'>
                d</div>
            <div class="test" name='7'>
                e</div>
            <div class="test" name='4'>
                f</div>
            <div class="test" name='8'>
                g</div>
        </div>
    </body>
    </html>
      

  2.   

    非常感谢!看来我得研究好一会请问如果上述name的值为日期(20131231232323,年月日时分秒),那排序用什么算法?我的想法是按照从2000年开始算起,全部换算成秒然后再去排序?
      

  3.   

    EntityList.sort(function (a, b) { //利用数组的排序方法重新排序对象
                    return b.Name - a.Name; //从大到小
                    //return a.Name - b.Name; //从小到大
                });
    把这段改了
    改成
    EntityList.sort(function (a, b) { //利用数组的排序方法重新排序对象
                    return (new Date(b.Name).valueOf()) - (new Date(a.Name).valueOf()); //从大到小
                    //return a.Name - b.Name; //从小到大
                });
    a是毫秒数(new Date.valueOf())或者可转换成js Date对象的字符串如20121231 23:59:59
      

  4.   

    只要你的name是数字,就用系统自带函数sort()就可以了<script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
    $(function(){
    $("#abv").click(function(){
    var ar=new Array();
    var br=new Array();
    $(".test").each(function(){
    ar[ar.length]=$(this).attr("name");
    });
    br=ar.sort();
    for(var i=br.length-1;i>=0;i--){
    $("#div1").append($(".test[name="+br[i]+"]"));
    }

    });
    })
    </script>
    <input type="button" id="abv" value="测试用按钮"/>
    <div id="div1">
    <div class="test" name='1'>
         <div class="test1">a</div>    
    </div>
    <div class="test" name='2'>b</div>
    <div class="test" name='3'>c</div>
    <div class="test" name='5'>d</div>
    <div class="test" name='7'>e</div>
    <div class="test" name='4'>f</div>
    <div class="test" name='8'>g</div>
    </div>
      

  5.   

    只要是基于距1970年的毫秒数基准,不会有问题的,时间除了字符串形式,可以用毫秒数形式,也容易保存,在前台后台都有对应的方式转换成Date对象如java和javascript都有new Date(/*参数可以使是毫秒数*/)
    然后调用Date.toLocaleString 或者toUTCString等等可以变成对应格式好的的时间字符串形式
      

  6.   

    不会出现你说的情况,你说的这种情况只会出现在最大时间到小时或者最大时间到分钟,这样一圈转下来有可能
    END_TIME<START_TIME,但是你现在加上了年月日,因此消除了上面的情况
      

  7.   

    多谢提供的信息。
    必须是毫秒数么?因为我从api获得的时间最小也只到秒。。
      

  8.   

    是的,在PHP中可以将时间转换成UNIX时间戳来进行比较,JS中也可以#7楼所说的换成毫秒。
    其实只要你是在前面加上年月日并把格式统一就不会有问题比如
    20130112(1)
    201325(2)
    需要把(2)的格式统一成20120205
      

  9.   

    格式是统一的,数据好交换。
    unix时间戳是个好方法,,,差点忘了
    多谢
      

  10.   

    差不多明白了,但是第九行的这个            var divJQ = $(">div.test", divTestJQ); //取容器需要重排的对象>div.test 中的 '>'是代表从子节点中取test是么?那么test指的是class = "test"么?