jQuery UI の Sortable プラグインを使ったドラッグ&ドロップによる並べ替えにおいて、並べ替え後の順番をクッキー(cookie)に格納し、次回ページを開いたときに、前回並べ替えた順番で表示させる方法。
cookie への格納には、jQuery の Cookie プラグインを使用する。
実装例(サンプル)
- 項目 1
- 項目 2
- 項目 3
- 項目 4
- 項目 5
- 項目 6
- 項目 7
実装例の動作について
- 「項目 1」をドラッグして、下へ動かし、「項目 2」の上に持ってくると、「項目 2」が上へ移動し、「項目 2」と「項目 3」の間にスペースができる。そのスペースへドロップすると、「項目 1」と「項目 2」が入れ替わり、「項目 2」「項目 1」「項目 3」…の順番になる。
- ページをリロード(再読み込み)しても順番を保持したまま、「項目 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="jquery.cookie.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="jquery.cookie.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="jquery.cookie.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="jquery.cookie.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>
<!--
jQuery( function() {
jQuery( '#jquery-ui-sortable' ) . sortable();
jQuery( '#jquery-ui-sortable' ) . disableSelection();
jQuery( '#jquery-ui-sortable' ) . sortable( {
update: function( event, ui ) {
var updateArray = jQuery( '#jquery-ui-sortable' ) . sortable( 'toArray' ) . join( ',' );
jQuery . cookie( 'jquery-ui-sortable', updateArray, { expires: 1 } );
}
} );
if( jQuery . cookie( 'jquery-ui-sortable' ) ){
var cookieValue = jQuery . cookie( 'jquery-ui-sortable' ) . split( ',' ) . reverse();
jQuery . each(
cookieValue,
function( index, value ){ jQuery( '#' + value ) . prependTo( '#jquery-ui-sortable' ); }
);
}
} );
// -->
</script>
<!--
jQuery( function() {
jQuery( '#jquery-ui-sortable' ) . sortable();
jQuery( '#jquery-ui-sortable' ) . disableSelection();
jQuery( '#jquery-ui-sortable' ) . sortable( {
update: function( event, ui ) {
var updateArray = jQuery( '#jquery-ui-sortable' ) . sortable( 'toArray' ) . join( ',' );
jQuery . cookie( 'jquery-ui-sortable', updateArray, { expires: 1 } );
}
} );
if( jQuery . cookie( 'jquery-ui-sortable' ) ){
var cookieValue = jQuery . cookie( 'jquery-ui-sortable' ) . split( ',' ) . reverse();
jQuery . each(
cookieValue,
function( index, value ){ jQuery( '#' + value ) . prependTo( '#jquery-ui-sortable' ); }
);
}
} );
// -->
</script>
CSS
<style>
<!--
#jquery-ui-sortable {
list-style-type: none;
margin: 0;
padding: 0;
width: 70%;
}
#jquery-ui-sortable li {
margin: 0 3px 3px 3px;
padding: 0.3em;
padding-left: 1em;
font-size: 15px;
font-weight: bold;
cursor: move;
}
-->
</style>
<!--
#jquery-ui-sortable {
list-style-type: none;
margin: 0;
padding: 0;
width: 70%;
}
#jquery-ui-sortable li {
margin: 0 3px 3px 3px;
padding: 0.3em;
padding-left: 1em;
font-size: 15px;
font-weight: bold;
cursor: move;
}
-->
</style>
HTML
<ul id="jquery-ui-sortable">
<li id="jquery-ui-sortable-item-1" class="ui-state-default">項目 1</li>
<li id="jquery-ui-sortable-item-2" class="ui-state-default">項目 2</li>
<li id="jquery-ui-sortable-item-3" class="ui-state-default">項目 3</li>
<li id="jquery-ui-sortable-item-4" class="ui-state-default">項目 4</li>
<li id="jquery-ui-sortable-item-5" class="ui-state-default">項目 5</li>
<li id="jquery-ui-sortable-item-6" class="ui-state-default">項目 6</li>
<li id="jquery-ui-sortable-item-7" class="ui-state-default">項目 7</li>
</ul>
<li id="jquery-ui-sortable-item-1" class="ui-state-default">項目 1</li>
<li id="jquery-ui-sortable-item-2" class="ui-state-default">項目 2</li>
<li id="jquery-ui-sortable-item-3" class="ui-state-default">項目 3</li>
<li id="jquery-ui-sortable-item-4" class="ui-state-default">項目 4</li>
<li id="jquery-ui-sortable-item-5" class="ui-state-default">項目 5</li>
<li id="jquery-ui-sortable-item-6" class="ui-state-default">項目 6</li>
<li id="jquery-ui-sortable-item-7" class="ui-state-default">項目 7</li>
</ul>