<div class=".items"> <div class="item"><div class="sort"></div> <div class="item"><div class="sort"></div> </div> <style> .items { /* * 该对象必须设置postion为相对或绝对定位,因为被拖动的对象定位是absolute * 如果容器没有positin的话,拖动时对象就会相对于最外层有position的元素来显示位置 */ position: relative; } </style> <script> Array.prototype.move = function (findex, tindex) { this.splice(tindex, 0, this.splice(findex, 1)[0]); } // 启用拖动排序 $(‘.items‘).sortable({ items: ‘.item‘, handle: ‘.sort‘, axis: ‘y‘, // 限制在Y轴方向拖动 containment: ‘.items‘, // 限制在.item容器内拖动,一般不用设置,设置了反而会导致拖动时移动不灵活,特别很难把元素拖动到最后一个元素下面,除非容器底部有比较大的间隙可容纳一个元素 start: (event, ui) => { ui.item.attr(‘sort‘, ui.item.index()); }, update: (event, ui) => { var fSort = ui.item.attr(‘sort‘); var tSort = ui.item.index(); items.move(fSort, tSort); for (var i = tSort; i < items.length; i++) { items[i].sort = i; } for (var i = tSort - 1; i > -1; i--) { items[i].sort = i; } ui.item.removeAttr(‘sort‘); } }); </script>