這是因爲你有一個清單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'將它們添加回列表的末尾。我編輯了我的答案,以包含另一個解決方案,您可以爲每個元素指定一個順序,而不僅僅是父元素。 –
太棒了!謝謝! –