Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery-sort li_Jquery_Sorting - Fatal编程技术网

jQuery-sort li

jQuery-sort li,jquery,sorting,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_i

我不知道为什么,但是这个代码没有正确地排序我的李。它们正在改变顺序,但例如,如果它们是这样的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);
    });
}
var-sorter\u-type=新数组(“日期排序”、“价格排序”、“折扣排序”、“时间排序”);
函数按过滤器排序(过滤器id,字段)
{
var sort_type=“”;
if($('#'+filter_id).attr(“类”)==“asc”)
{   
$('#'+filter_id).removeClass(“asc”);
$('#'+filter_id).addClass(“desc”);
sort_type=“desending”;
}
其他的
{
$('#'+filter_id).removeClass(“desc”);
$('#'+filter_id).addClass(“asc”);
sort_type=“”;
}
对于(i=0;i键b)?1:0;
}否则{
返回(keyA
按钮代码:

        <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>

可能是因为您从未从排序回调返回
-1
。总是只有
1
0
,顺便说一句,您也没有正确返回

如果按升序排序,则如果
keyA
小于
keyB
,则必须返回
-1
(负数),如果它们相等,则返回
0
,如果
keyA
大于
keyB
,则返回
+1
(正数)

例如:

$listLi.sort(function(a, b){
    var keyA = parseInt($(a).attr(field), 10);
    var keyB = parseInt($(b).attr(field), 10);

    // sorts in descending order. The result will be
    // negative if keyA > keyB
    // 0        if keyA == keyB
    // positive if keyA < keyB

    var result = keyB - keyA;
    if ($sort.hasClass('asc') {
        // multiplying by -1 reverses the order
        result = result * (-1);
    }
    return result;
});
$listLi.sort(函数(a,b){
var keyA=parseInt($(a).attr(字段),10);
var-keyB=parseInt($(b).attr(字段),10);
//按降序排序。结果将为
//如果keyA>keyB,则为负值
//如果keyA==keyB,则为0
//如果keyA

阅读。

了解有关排序回调的更多信息。正如Felix Kling所指出的,您的排序函数不符合要求。以下是有效排序必须解决的条件:

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

他已经发布了一个有效的排序功能(并更新了我的文档链接),因此,我将为您指出一个jQuery UI插件,用于在将来实现此功能:。

看起来您的代码不仅仅是在进行排序。您应该将其拆分为执行特定任务的更小的函数。更清楚的是,这也不起作用,李的仍然是随机顺序。无论如何,感谢林K