我不知道为什么但这段代码没有正确排序我的李。他们正在改变顺序,但是例如,如果他们像这样的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>
答案 0 :(得分:1)
也许是因为你永远不会从排序回调中返回-1
。始终只有1
或0
,顺便说一句,您也没有正确返回。
如果您按升序顺序排序,那么如果-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排序为低于。compareFunction(a, b)
必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义他已经发布了一个工作排序函数(并且我已经找到了我的文档链接),所以我只想指出一个jQuery UI插件,以便将来完成这项工作:jQuery UI Sortable。