jQuery uiのsortableを実行するさい、tableタグを利用するときは以下の注意点がある。

  • tbodyタグが必要
  • ドラッグする要素の幅が小さくなる

【改善点】

tbodyが必要

ドラッグするための項目の親要素につけたクラスもしくはIDに対してsortableを実行するため、trがドラッグ対象となる場合、tableタグにsortableしても、ブラウザによってtbodyタグがない場合自動で挿入する自動補完機能が始まるため、任意でtbodyタグをつける必要がある。

<table>
<tbody class="sortable">// 任意で設定
<tr>
<th>項目</th><td>内容</td>
</tr>
<tr>
<th>項目</th><td>内容</td>
</tr>
<tr>
<th>項目</th><td>内容</td>
</tr>
</tbody>
</table>

ドラッグする要素の幅

表示しているもののwidthを取得してドラッグしている項目に適応するように、オプションを追加する。

$(function(){
    function fixPlaceHolderWidth(event, ui){
        ui.children().each(function(){
            $(this).width($(this).width());
        });
        return ui;
    };

    $('.sortable').sortable({
        start: function(event, ui){
            ui.placeholder.height(ui.helper.outerHeight());
        },
        helper: fixPlaceHolderWidth
    });
});