javascript - 按多个数据属性对 div 进行排序
问题描述
如何按两个数据属性排序?首先我需要排序discount
,然后排序weight
。
<div id="list">
<div class="row" data-weight="1" data-discount=0>banana</div>
<div class="row" data-weight="3" data-discount=30>apple</div>
<div class="row" data-weight="4" data-discount=0>avocado</div>
<div class="row" data-weight="8" data-discount=15>milk</div>
</div>
function sortOrder(){
divList.sort(function(a, b){
return $(b).data("order")-$(a).data("order")
});
$(".list").html(divList);
}
解决方案
您当前的sort()
逻辑显示了如何为单个属性执行此操作。对于多个属性,您只需修改逻辑以适应值相同的情况,如下所示。
请注意,这个逻辑可以不那么冗长,但我这样保留它是为了让流程更明显。
var $divList = $('#list .row');
function sortOrder() {
$divList.sort(function(a, b) {
var $a = $(a), $b = $(b);
if ($a.data('discount') < $b.data('discount')) {
return 1;
} else if ($a.data('discount') > $b.data('discount')) {
return -1;
}
if ($a.data('weight') < $b.data('weight')) {
return 1;
} else if ($a.data('weight') > $b.data('weight')) {
return -1;
}
return 0;
});
$("#list").append($divList);
}
sortOrder();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="list">
<div class="row" data-weight="1" data-discount=0>banana</div>
<div class="row" data-weight="3" data-discount=30>apple</div>
<div class="row" data-weight="4" data-discount=0>avocado</div>
<div class="row" data-weight="8" data-discount=15>milk</div>
</div>
推荐阅读
- javascript - 在 JavaScript 中比较不同格式的日期
- c# - WPF 验证错误一直存在,直到控制失去焦点
- matlab - Matlab:使用匿名函数求解二阶 ODE
- command-line-arguments - FluidSynth 的命令行混响参数
- bash - 用文件名替换一列的标题
- r - 如何绘制三个分类值?
- r - 逆约翰逊变换
- django - Django/如何获得订单总和 - 'int' 对象不可迭代
- java - 在firebase android开发中通过循环从子节点中检索特定数据
- python - 如何修复 python 中的“ValueError:数学域错误”?