jQuery-sort li
我不知道为什么,但是这个代码没有正确地排序我的李。它们正在改变顺序,但例如,如果它们是这样的1,5,2,9,那么它将改变为5,2,9,1 jQuery代码: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
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所指出的,您的排序函数不符合要求。以下是有效排序必须解决的条件:
- 如果
小于0,则将a排序到比b更低的索引compareFunction(a,b)
- 如果
返回0,则保持a和b彼此不变,但根据所有不同的元素进行排序。注意:ECMAscript标准不保证这种行为,因此并非所有浏览器(如至少可追溯到2003年的Mozilla版本)都遵守这一点compareFunction(a,b)
- 如果
大于0,则将b排序为比a低的索引compareFunction(a,b)
当给定一对特定的元素a和b作为其两个参数时,必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义compareFunction(a,b)
他已经发布了一个有效的排序功能(并更新了我的文档链接),因此,我将为您指出一个jQuery UI插件,用于在将来实现此功能:。看起来您的代码不仅仅是在进行排序。您应该将其拆分为执行特定任务的更小的函数。更清楚的是,这也不起作用,李的仍然是随机顺序。无论如何,感谢林K