javascript - 如何按数据属性对 div 顺序位置进行排序

标签 javascript jquery html sorting

<分区>

我想根据 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 关键字,而您需要使用 ab 元素引用以便比较它们。您还可以使用 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>

请注意,排序算法中的逻辑不处理重复值,因此如果需要,您将需要实现辅助排序方法。

关于javascript - 如何按数据属性对 div 顺序位置进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53518330/

相关文章:

javascript - 对象到字符串,反之亦然

SQL 事务中的 Javascript Promise

javascript - D3 : move circle between two different g elements in force layout

jQuery 选择所有有标题的元素

在 html 模板上附加/前置 div 的 javascript 逻辑

java - 为什么我在访问字符串时得到 "error : expected ;"?

javascript - 复制和区分表格的部分

html - 如何使用 html 和 css 缩放(外部)元素与(内部)img 元素相同?

jquery - 无法解释的内联 CSS 添加到 div

jquery - 如何排除按钮被过滤?