javascript排序函数有问题。
以下函数按数据价格属性降序对包装器中的项进行排序。
HTML部分:
<div class="wrapper">
<div class="item" data-price="1"></div>
<div class="item" data-price="2"class="blacklisted"></div>
<div class="item" data-price="3"></div>
<div class="item" data-price="4" class="blacklisted"></div>
</div>
JQuery部分:
var $wrapper = $('.wrapper');
$wrapper.find('.item').sort(function (a, b) {
return -a.getAttribute('data-price') - -b.getAttribute('data-price');
}).appendTo($wrapper);
现在我想改为JQuery部分,它按数据价格排序
电流响应
<div class="wrapper">
<div class="item" data-price="4" class="blacklisted"></div>
<div class="item" data-price="3"></div>
<div class="item" data-price="2"class="blacklisted"></div>
<div class="item" data-price="1"></div>
</div>
希望回复:
<div class="wrapper">
<div class="item" data-price="3"></div>
<div class="item" data-price="1"></div>
<div class="item" data-price="4" class="blacklisted"></div>
<div class="item" data-price="2" class="blacklisted"></div>
</div>
最佳答案
元素不应具有两个class
属性。您可以链接.filter(".blacklisted")
然后调用.appendTo()
var $wrapper = $('.wrapper');
$wrapper.find('.item').sort(function(a, b) {
return +a.getAttribute('data-price') > +b.getAttribute('data-price') ? -1 : 1;
})
.appendTo($wrapper)
.filter(".blacklisted")
.appendTo($wrapper);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<div class="wrapper">
<div class="item" data-price="1">price</div>
<div class="item blacklisted" data-price="2">blacklisted</div>
<div class="item" data-price="3">price</div>
<div class="item blacklisted" data-price="4">blacklisted</div>
</div>