按属性对Div进行排序-asc或desc
Sort Div by attribute - asc or desc
我编写了按价格属性对div进行排序的代码。但不会正确工作。谁能帮忙?所以你可以在代码jsfiddle 中看到
Js:
$(".link-sort-list").on("click",function(e){
var $list = $('#sort-list');
var $productList = $('div.product-box',$list);
$productList.sort(function(a, b){
var keyA = $(a).attr("price");
var keyB = $(b).attr("price");
if($(this).hasClass('asc')){
console.log("asc");
return (parseInt(keyA) > parseInt(keyB)) ? 1 : 0;
} else {
console.log("desc");
return (parseInt(keyA) < parseInt(keyB)) ? 1 : 0;
}
});
$.each($productList, function(index, row){
$list.append(row);
});
e.preventDefault();
});
https://jsfiddle.net/danvim/2xh4LLgr/3/
您需要记住$this
在不同功能范围中的变化。
这样做可以设置目标:
var $this = $(this)
更新代码:
$(".link-sort-list").on("click",function(e){
var $this = $(this); //<--
var $list = $('#sort-list');
var $productList = $('div.product-box',$list);
$productList.sort(function(a, b){
var keyA = $(a).attr("price");
var keyB = $(b).attr("price");
if($this.hasClass('asc')){ //<--
console.log("asc");
return (parseInt(keyA) > parseInt(keyB)) ? 1 : 0;
} else {
console.log("desc");
return (parseInt(keyA) < parseInt(keyB)) ? 1 : 0;
}
});
$.each($productList, function(index, row){
$list.append(row);
});
e.preventDefault();
});
最终解决方案
但我建议将$this
的检查置于sort
方法之外。此外,如果只返回布尔值即可,则不需要简写。
所以我会简化如下:https://jsfiddle.net/danvim/2xh4LLgr/5/
这将运行得更快,因为对.asc
的检查只发生一次,而您的原始函数将对要比较的每个项目检查一次。
$(".link-sort-list").on("click",function(e){
var $this = $(this);
var $list = $('#sort-list');
var $productList = $('div.product-box',$list);
var order = $this.hasClass('asc');
console.log(order);
$productList.sort(function(a, b){
var keyA = $(a).attr("price");
var keyB = $(b).attr("price");
return order ? (parseInt(keyA) > parseInt(keyB)) : (parseInt(keyA) < parseInt(keyB));
});
$.each($productList, function(index, row){
$list.append(row);
});
e.preventDefault();
});
在Daniel的回答中,使用减法(-
)而不是逻辑比较(<
,>
)。
sort(compare)
中的"compare"函数必须具有两个参数a
和b
。compare
函数的返回值需要返回基于以下两个参数的值:
- 如果
a
大于b
,则返回大于0 - 如果
a
等于b
,则返回0 - 如果
a
小于b
,则返回小于0
有关详细信息,请参阅答案"排序函数如何在JavaScript中工作",以一种很好的方式进行了解释。
$(".link-sort-list").on("click",function(e){
var $this = $(this);
var $list = $('#sort-list');
var $productList = $('div.product-box',$list);
var order = $this.hasClass('asc');
console.log(order);
$productList.sort(function(a, b){
var keyA = $(a).attr("price");
var keyB = $(b).attr("price");
return order ? (parseInt(keyA) - parseInt(keyB)) : (parseInt(keyB) - parseInt(keyA));
});
$.each($productList, function(index, row){
$list.append(row);
});
e.preventDefault();
});
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 如何通过引用var Using DataTables来进行分页或排序
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- AngularJs对所有页面中的所有记录进行排序
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 按从高到低对多个int变量进行排序
- jQuery UI可排序-多连接列表拖动
- Javascript排序字符串或数字
- 使用带有asc和desc的纯jquery进行表排序
- 排序并将 li 附加到 UL ASC
- 按属性对Div进行排序-asc或desc
- Javascript数组排序将字符串MAG250放在底部,其他项目放在ASC顶部
- Javascript:先按第二列desc对2D数组排序,然后按第一列asc排序
- 按姓氏按ASC或DESC顺序排序表
- 在json_encode之后按asc值排序javascript数组
- 我怎么能做一个asc和desc排序使用下划线
- 用javascript对表进行排序,有些列是asc,有些列则是desc