我想根据 data-position
重新排序我的 div,我试过了,但它不起作用。
jQuery("#bout div.foot").sort(function(a, b) {
var position = jQuery(this).attr("data-position");
return parseInt(a.position) - parseInt(b.position);
}).each(function() {
var elem = jQuery(this);
elem.remove();
jQuery(elem).appendTo("#bout");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container vendors" id="bout">
<div class="col-md-6 foot" data-position="4">4</div>
<div class="col-md-6 foot" data-position="3">3</div>
<div class="col-md-6 foot" data-position="4">4</div>
<div class="col-md-6 foot" data-position="1">1</div>
</div>
您在 sort()
处理程序中使用了 this
关键字,而您需要使用 a
和 b
元素引用以便比较它们。您还可以使用 data()
而不是 attr()
来返回属性。这也将返回一个整数以否定对 parseInt()
的需要。元素排序后,您只需将它们 append()
到容器即可,无需额外的 each()
循环。试试这个:
$("#bout div.foot").sort(function(a, b) {
return $(a).data("position") - $(b).data("position");
}).appendTo("#bout");
// alternative #1
// $("#bout div.foot").sort((a, b) => $(a).data("position") - $(b).data("position")).appendTo("#bout");
// alternative #2
// $("#bout div.foot").sort((a, b) => a.dataset.position - b.dataset.position).appendTo("#bout");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container vendors" id="bout">
<div class="col-md-6 foot" data-position="4">4</div>
<div class="col-md-6 foot" data-position="3">3</div>
<div class="col-md-6 foot" data-position="4">4</div>
<div class="col-md-6 foot" data-position="1">1</div>
</div>
请注意,排序算法中的逻辑不处理重复值,因此如果需要,您将需要实现辅助排序方法。