jQuery UI の Sortable プラグインの connectWith オプションを使うと、複数のリストの境界を越え、ドラッグ&ドロップで並べ替えることができる。
いづれかのリスト内の項目を、他のリストへすべて移動しても、CSSで一行ほどのスペースを残し、そこへドロップすることができるようにした。
実装例(サンプル)
- 項目 1-1
- 項目 1-2
- 項目 1-3
- 項目 1-4
- 項目 1-5
- 項目 1-6
- 項目 1-7
- 項目 2-1
- 項目 2-2
- 項目 2-3
- 項目 2-4
- 項目 2-5
- 項目 2-6
- 項目 2-7
- 項目 3-1
- 項目 3-2
- 項目 3-3
- 項目 3-4
- 項目 3-5
- 項目 3-6
- 項目 3-7
実装例の動作について
左のリストの「項目 1-1」をドラッグして、中央のリストの「項目 2-2」の上に持ってくると、「項目 2-2」が下へ移動し、「項目 2-1」と「項目 2-2」の間にスペースができる。そのスペースへドロップすると、中央のリストは「項目 2-1」「項目 1-1」「項目 2-2」「項目 2-3」…の順番になる。左のリストは、「項目 1-1」が中央のリストへ移動したので、「項目 1-2」「項目 1-3」「項目 1-4」…の順番になる。
同様に、全ての項目が、左、中央、右のリスト内の任意の位置へ移動できる。
いづれかのリスト内の項目を、他のリストへ、すべて移動した場合も、一行ほどのスペースが残るので、そこへドロップすることができる。
実装例のソースコード
読み込み
読み込み方は、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( {
connectWith: '.jquery-ui-sortable'
} );
$( '.jquery-ui-sortable' ) . disableSelection();
} );
// -->
</script>
<!--
$( function() {
$( '.jquery-ui-sortable' ) . sortable( {
connectWith: '.jquery-ui-sortable'
} );
$( '.jquery-ui-sortable' ) . disableSelection();
} );
// -->
</script>
CSS
<style>
<!--
ul.jquery-ui-sortable {
list-style-type: none;
margin: 0 2px;
padding: 2px;
width: 25%;
float: left;
min-height: 1.5em;
background-color: beige;
border: solid 1px #606060;
}
ul.jquery-ui-sortable li {
margin: 3px;
padding: 0.3em;
padding-left: 1em;
font-size: 15px;
font-weight: bold;
cursor: move;
}
li.border-color-red {
border-color: red;
}
li.border-color-blue {
border-color: blue;
}
li.border-color-green {
border-color: green;
}
-->
</style>
<!--
ul.jquery-ui-sortable {
list-style-type: none;
margin: 0 2px;
padding: 2px;
width: 25%;
float: left;
min-height: 1.5em;
background-color: beige;
border: solid 1px #606060;
}
ul.jquery-ui-sortable li {
margin: 3px;
padding: 0.3em;
padding-left: 1em;
font-size: 15px;
font-weight: bold;
cursor: move;
}
li.border-color-red {
border-color: red;
}
li.border-color-blue {
border-color: blue;
}
li.border-color-green {
border-color: green;
}
-->
</style>
HTML
<ul class="jquery-ui-sortable">
<li class="ui-state-default border-color-red">項目 1-1</li>
<li class="ui-state-default border-color-red">項目 1-2</li>
<li class="ui-state-default border-color-red">項目 1-3</li>
<li class="ui-state-default border-color-red">項目 1-4</li>
<li class="ui-state-default border-color-red">項目 1-5</li>
<li class="ui-state-default border-color-red">項目 1-6</li>
<li class="ui-state-default border-color-red">項目 1-7</li>
</ul>
<ul class="jquery-ui-sortable">
<li class="ui-state-default border-color-blue">項目 2-1</li>
<li class="ui-state-default border-color-blue">項目 2-2</li>
<li class="ui-state-default border-color-blue">項目 2-3</li>
<li class="ui-state-default border-color-blue">項目 2-4</li>
<li class="ui-state-default border-color-blue">項目 2-5</li>
<li class="ui-state-default border-color-blue">項目 2-6</li>
<li class="ui-state-default border-color-blue">項目 2-7</li>
</ul>
<ul class="jquery-ui-sortable">
<li class="ui-state-default border-color-green">項目 3-1</li>
<li class="ui-state-default border-color-green">項目 3-2</li>
<li class="ui-state-default border-color-green">項目 3-3</li>
<li class="ui-state-default border-color-green">項目 3-4</li>
<li class="ui-state-default border-color-green">項目 3-5</li>
<li class="ui-state-default border-color-green">項目 3-6</li>
<li class="ui-state-default border-color-green">項目 3-7</li>
</ul>
<div style="clear: both;"></div>
<li class="ui-state-default border-color-red">項目 1-1</li>
<li class="ui-state-default border-color-red">項目 1-2</li>
<li class="ui-state-default border-color-red">項目 1-3</li>
<li class="ui-state-default border-color-red">項目 1-4</li>
<li class="ui-state-default border-color-red">項目 1-5</li>
<li class="ui-state-default border-color-red">項目 1-6</li>
<li class="ui-state-default border-color-red">項目 1-7</li>
</ul>
<ul class="jquery-ui-sortable">
<li class="ui-state-default border-color-blue">項目 2-1</li>
<li class="ui-state-default border-color-blue">項目 2-2</li>
<li class="ui-state-default border-color-blue">項目 2-3</li>
<li class="ui-state-default border-color-blue">項目 2-4</li>
<li class="ui-state-default border-color-blue">項目 2-5</li>
<li class="ui-state-default border-color-blue">項目 2-6</li>
<li class="ui-state-default border-color-blue">項目 2-7</li>
</ul>
<ul class="jquery-ui-sortable">
<li class="ui-state-default border-color-green">項目 3-1</li>
<li class="ui-state-default border-color-green">項目 3-2</li>
<li class="ui-state-default border-color-green">項目 3-3</li>
<li class="ui-state-default border-color-green">項目 3-4</li>
<li class="ui-state-default border-color-green">項目 3-5</li>
<li class="ui-state-default border-color-green">項目 3-6</li>
<li class="ui-state-default border-color-green">項目 3-7</li>
</ul>
<div style="clear: both;"></div>