这是因为你有一个清单5项,但你只排序其中3个。
为什么不实际嵌套父div中的子div?
$('.sortableDiv').sort(sort_1).appendTo('#sortableContainer');
function sort_1(a, b) {
return ($(b).data('order')) < ($(a).data('order')) ? 1 : -1;
}
.sortableDiv{
background: #EEE;
border: 1px solid #CCC;
padding:3px;
margin-bottom:5px;
}
.detail{
border: 1px solid red;
padding:3px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="sortableContainer">
<div class="sortableDiv" data-order="3">Div1
<div class="child1 detail">Child1</div>
</div>
<div class="sortableDiv" data-order="1">Div2</div>
<div class="sortableDiv" data-order="2">
Div3
<div class="child3 detail">Child3</div>
</div>
</div>
演示:http://jsfiddle.net/g5p2gdy5/3/
编辑
由于嵌套是不可能的,让我们尝试也与家长的div沿分拣孩子的div。父进程得到一个整数为了像data-order="1"
和孩子得到一个十进制数顺序一样data-order="1.1"
和data-order="1.2"
$('.sortableDiv').sort(sort_1).appendTo('#sortableContainer');
function sort_1(a, b) {
return ($(b).data('order')) < ($(a).data('order')) ? 1 : -1;
}
.sortableDiv:before{
font-size: 12px;
color: red;
padding-right: 2px;
content: attr(data-order)
}
.detail{
padding-left:10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div id="sortableContainer">
<div class="sortableDiv child1 detail" data-order="3.2">Child 1.2</div>
<div class="sortableDiv child1 detail" data-order="3.1">Child 1.1</div>
<div class="sortableDiv child3 detail" data-order="2.1">Child3</div>
<div class="sortableDiv" data-order="3">Div1</div>
<div class="sortableDiv" data-order="1">Div2</div>
<div class="sortableDiv" data-order="2">Div3</div>
</div>
演示:http://jsfiddle.net/g5p2gdy5/4/
我不能巢标记孩子的div原因!我想只对sortableDiv类进行排序。在这个过程中,检查next()。hasclass(“detail”),然后将它放在可排序div的新订单位置旁边。 –
那么问题是你有5个元素,你删除它们中的3个,对它们进行排序,然后用'appendTo'将它们添加回列表的末尾。我编辑了我的答案,以包含另一个解决方案,您可以为每个元素指定一个顺序,而不仅仅是父元素。 –
太棒了!谢谢! –