jQuery - 排序李

时间:2013-02-08 16:55:32

标签: jquery sorting

我不知道为什么但这段代码没有正确排序我的李。他们正在改变顺序,但是例如,如果他们像这样的1,5,2,9那么它将变为5,2,9,1。

jQuery代码:

var sorter_type=new Array("date_sort","price_sort","discount_sort","time_sort");
function sorting_by_filter(filter_id,field)
{
    var sort_type="";

    if($('#'+filter_id).attr("class")=="asc")
    {   
        $('#'+filter_id).removeClass("asc");
        $('#'+filter_id).addClass("desc");
        sort_type=" desending";
    }
    else
    {
        $('#'+filter_id).removeClass("desc");
        $('#'+filter_id).addClass("asc");
        sort_type="";
    }

    for(i=0;i<sorter_type.length;i++)
    {
        if(sorter_type[i]==filter_id)
        {
            $('#'+filter_id).parent().attr("class","");
            $('#'+filter_id).parent().addClass("clsTop_Menu_Act"+sort_type);
        }
        else
        {
            $("#"+sorter_type[i]).parent().attr("class","");
        }

    }

    var $sort = $('#'+filter_id);

    var $list = $('.clsDeal_Whole_Cont');
    var $listLi = $('li.clsDeal_Blk_Cont',$list);
    $listLi.sort(function(a, b){
        var keyA = parseInt($(a).attr(field));
        var keyB = parseInt($(b).attr(field));
        if($($sort).hasClass('asc')){
            return (keyA > keyB) ? 1 : 0;
        } else {
            return (keyA < keyB) ? 1 : 0;
        }
    });
    $.each($listLi, function(index, row){
        $list.append(row);
    });
}
按钮代码:

        <ul class="clearfix" id="filters">
      <li class="clsTop_Menu_Act"><a href="javascript:void(0)" class="asc"     onclick="sorting_by_filter('date_sort','title')" id="date_sort">New</a></li>
          <li><a href="javascript:void(0)" onclick="sorting_by_filter('price_sort','price')" class="asc" id="price_sort">Price</a></li>
          <li><a href="javascript:void(0)" onclick="sorting_by_filter('discount_sort','discount')" class="asc" id="discount_sort">Discount</a></li>
          <li><a href="javascript:void(0)" onclick="sorting_by_filter('time_sort','time_left')" class="asc" id="time_sort" >Time Left</a></li>
</ul>

需要排序的内容:

<ul class="clsDeal_Whole_Cont clearfix">
     <li class="clsDeal_Blk_Cont" style="display:block" id="deal_1"  price="2" discount="50" time_left="1360363800">
     <li class="clsDeal_Blk_Cont" style="display:block" id="deal_10"  price="20" discount="45" time_left="1360363700">
     <li class="clsDeal_Blk_Cont" style="display:block" id="deal_5"  price="19" discount="80" time_left="1360363800">
</ul>

2 个答案:

答案 0 :(得分:1)

也许是因为你永远不会从排序回调中返回-1。始终只有10,顺便说一句,您也没有正确返回。

如果您按升序顺序排序,那么如果-1小于keyA,则必须返回keyB(负数),{{1} }如果0大于+1,则相等或keyA(正数)。

示例:

keyB

通过阅读Array#sort documentation了解有关排序回调的详情。

答案 1 :(得分:0)

正如费利克斯·克林指出的那样,你的排序功能还不尽如人意。这些是有效排序必须解决的条件,来自MDN documentation

  • 如果compareFunction(a, b)小于0,则将a排序为低于b的索引。
  • 如果compareFunction(a, b)返回0,则保持a和b相对于彼此保持不变,但是对所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(例如可追溯到至少2003年的Mozilla版本)都尊重这一点。
  • 如果compareFunction(a, b)大于0,则将b排序为低于。
  • 的索引 当给定一对特定元素a和b作为其两个参数时,
  • compareFunction(a, b)必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义

他已经发布了一个工作排序函数(并且我已经找到了我的文档链接),所以我只想指出一个jQuery UI插件,以便将来完成这项工作:jQuery UI Sortable