jquery ドラッグして移動(jquery UI / sortable)

一覧を並び替えしたい

作成日:2019-07-06, 更新日:2023-01-11

基本

・jquery UIが必要
・詳細:jQuery Sortable(公式)
・各パラメータのまとめ:Sortable - jQuery UI API 1.8.4 日本語リファレンス - StackTrace

直の子に「クラス:ui-state-default」を指定して、親要素で実行

▼サンプル

<table border="1" style="width:100%">
  <tbody id="tbl_sortable">
    <tr class="ui-state-default"><th>1</th><td>a</td><td>jo</td></tr>
    <tr class="ui-state-default"><th>2</th><td>a</td><td>jo</td></tr>
    <tr class="ui-state-default"><th>3</th><td>a</td><td>jo</td></tr>
    <tr class="ui-state-default"><th>4</th><td>a</td><td>jo</td></tr>
  </tbody>
</table>
<script>
  $("#tbl_sortable").sortable();
</script>

<div id="sortableArea">
  <div class="ui-state-default">1</div>
  <div class="ui-state-default">2</div>
  <div class="ui-state-default">3</div>
  <div class="ui-state-default">4</div>
  <div class="ui-state-default">5</div>
</div>
<script>
  $("#sortableArea").sortable();
</script>

並び順を取得して何かしたい

・「sortable('serialize')」で「id」の値を取得してくれる
・IDの値に「"-"(ハイフン)、"="(等号)、"_"(アンダースコア)」があるかどうかを判別・分割

<table id="hoge_target">
<tr id="foo_1"><td></td></tr>
<tr id="foo_2"><td></td></tr>
<tr id="foo_3"><td></td></tr>
</table>

<script>
jQuery('#hoge_target').sortable({
  axis:'y',
  stop: function(event,ui){
    var url_api = '〇〇.php?'+$(this).sortable('serialize');
    // 「〇〇.php?foo[]=1&foo[]=2&foo[]=3」みたいな感じになる
    // これをDBに保存させるAPIに投げたりする
  }
});
</script>

id以外を使いたいとき

・「sortable()」の第2引数にattributeで指定

~省略~
<tr id="foo_1" name="var_1"><td></td></tr>
~省略~

<script>
~省略~
    // nameを取得
    var _name = $(this).sortable('serialize', {attribute:'name'});
    // 「var[]=1&var[]=2&var[]=3」みたいな感じになる

    // idとnameの両方を取得
    var _all = '';
    _all += $(this).sortable('serialize');
    _all += '&';
    _all += $(this).sortable('serialize', {attribute:'name'});
    // 「foo[]=1&foo[]=2&foo[]=3&var[]=1&var[]=2&var[]=3」みたいな感じになる
~省略~