インデックス自体を設定する必要はありません。コンテナ内の順序を文字通り変更したい。
これは簡単です(DOMまたはjQueryを使用):要素を前の兄弟の前に移動する場合は、次を使用します。insertBfore
prev
var elm = $("selector_for_the_element");
elm.insertBefore(elm.prev());
...または次の兄弟の後に、次を使用します:insertAfter
next
var elm = $("selector_for_the_element");
elm.insertAfter(elm.next());
おそらく、アニメーション化が完了したときにこれを行い、divを完全な位置ではなく、フロートに戻します。
実例| ソース
HTML:
<div id="container"></div>
CSS:
#container div {
float: left;
width: 4em;
border: 1px solid black;
margin: 2px;
padding: 2px;
}
.left, .right {
cursor: pointer;
font-weight: bold;
font-size: 14pt;
background-color: #eee;
border: 1px solid #aaa;
}
JavaScript:
jQuery(function($) {
var container = $("#container");
var index;
for (index = 0; index < 10; ++index) {
$("<div>d" + index +" <span class='left'><</span> <span class='right'>></span></div>")
.appendTo(container)
.attr("id", "d" + index);
}
container.delegate(".left", "click", function() {
var div = $(this).closest("div"),
prev = div.prev();
if (prev[0]) {
div.insertBefore(prev);
}
});
container.delegate(".right", "click", function() {
var div = $(this).closest("div"),
next = div.next();
if (next[0]) {
div.insertAfter(next);
}
});
});