jQuery UI の Sortable プラグインの items オプションを使うと、ドラッグ&ドロップで並べ替える対象となる要素を指定できる。
デフォルトでは、リストタグの li 要素が、並べ替える対象だが、items オプションを使うことで、任意の要素に変更できる。要素名でも指定できるが、クラス名で指定すると、タグを入れ子にしても大丈夫なので、私ならクラス名で指定する。
実装例(サンプル)
-
項目 1
- 項目 1-1
- 項目 1-2
- 項目 1-3
-
項目 2
- 項目 2-1
- 項目 2-2
- 項目 2-3
-
項目 3
- 項目 3-1
- 項目 3-2
- 項目 3-3
実装例の動作について
「項目 1」にカーソルを合わせると、カーソルの形状が移動用カーソル形状になる。「項目 1」をドラッグし、「項目 2」のボックスの上に持ってくると、「項目 2」のボックスが上へ移動し、「項目 2」のボックスと「項目 3」のボックスの間にスペースができる。そのスペースへドロップすると、「項目 1」のボックスと「項目 2」のボックスが入れ替わり、「項目 2」「項目 1」「項目 3」のボックスの順番になる。
実装例のソースコード
読み込み
読み込み方は、2種類ある。パスは、それぞれ、アップロードした場所を指定する。
まとめて読み込む場合
<link rel="stylesheet" href="themes/base/jquery.ui.all.css">
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery-ui-1.8.12.custom.min.js"></script>
個別に読み込む場合
<link rel="stylesheet" href="themes/base/jquery.ui.all.css">
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="ui/jquery.ui.mouse.js"></script>
<script type="text/javascript" src="ui/jquery.ui.sortable.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="ui/jquery.ui.core.js"></script>
<script type="text/javascript" src="ui/jquery.ui.widget.js"></script>
<script type="text/javascript" src="ui/jquery.ui.mouse.js"></script>
<script type="text/javascript" src="ui/jquery.ui.sortable.js"></script>
JavaScript
<script>
<!--
$( function() {
$( '#jquery-ui-sortable' ) . sortable( {
items: '.jquery-ui-sortable-item',
handle: 'div',
} );
} );
// -->
</script>
<!--
$( function() {
$( '#jquery-ui-sortable' ) . sortable( {
items: '.jquery-ui-sortable-item',
handle: 'div',
} );
} );
// -->
</script>
CSS
<style>
<!--
ul.jquery-ui-sortable {
list-style-type: none;
margin: 0;
padding: 0;
width: 70%;
}
li.jquery-ui-sortable-item {
margin: 5px;
padding: 0.5em;
border: 1px darkgray solid;
border-radius: 5px;
background-color: #fcfcfc;
}
li.jquery-ui-sortable-item div {
padding: 0 0 0 1em;
font-size: 15px;
font-weight: bold;
cursor: move;
border-radius: 5px;
}
li.jquery-ui-sortable-item ul {
font-size: 13px;
}
-->
</style>
<!--
ul.jquery-ui-sortable {
list-style-type: none;
margin: 0;
padding: 0;
width: 70%;
}
li.jquery-ui-sortable-item {
margin: 5px;
padding: 0.5em;
border: 1px darkgray solid;
border-radius: 5px;
background-color: #fcfcfc;
}
li.jquery-ui-sortable-item div {
padding: 0 0 0 1em;
font-size: 15px;
font-weight: bold;
cursor: move;
border-radius: 5px;
}
li.jquery-ui-sortable-item ul {
font-size: 13px;
}
-->
</style>
HTML
<ul class="jquery-ui-sortable">
<li class="jquery-ui-sortable-item"><div class="ui-state-default">項目 1</div>
<ul>
<li>項目 1-1</li>
<li>項目 1-2</li>
<li>項目 1-3</li>
</ul>
</li>
<li class="jquery-ui-sortable-item"><div class="ui-state-default">項目 2</div>
<ul>
<li>項目 2-1</li>
<li>項目 2-2</li>
<li>項目 2-3</li>
</ul>
</li>
<li class="jquery-ui-sortable-item"><div class="ui-state-default">項目 3</div>
<ul>
<li>項目 3-1</li>
<li>項目 3-2</li>
<li>項目 3-3</li>
</ul>
</li>
</ul>
<li class="jquery-ui-sortable-item"><div class="ui-state-default">項目 1</div>
<ul>
<li>項目 1-1</li>
<li>項目 1-2</li>
<li>項目 1-3</li>
</ul>
</li>
<li class="jquery-ui-sortable-item"><div class="ui-state-default">項目 2</div>
<ul>
<li>項目 2-1</li>
<li>項目 2-2</li>
<li>項目 2-3</li>
</ul>
</li>
<li class="jquery-ui-sortable-item"><div class="ui-state-default">項目 3</div>
<ul>
<li>項目 3-1</li>
<li>項目 3-2</li>
<li>項目 3-3</li>
</ul>
</li>
</ul>