29

jQuery のdraggable機能はテーブル (FF3 または Safari) では機能しないようです。これがどのように機能するかを想像するのはちょっと難しいので、そうでないことは驚くことではありません.

<html>
  <style type='text/css'>
    div.table { display: table; }
    div.row { display: table-row; }
    div.cell { display: table-cell; }
  </style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script src="http://dev.jquery.com/view/tags/ui/latest/ui/ui.core.js"></script>
  <script src="http://dev.jquery.com/view/tags/ui/latest/ui/ui.draggable.js"></script>
  <script>
  $(document).ready(function(){
    $(".row").draggable();
  });
  </script>
  <body>
    <div class='table'>
      <div class='row'>
        <div class='cell'>Foo</div>
        <div class='cell'>Bar</div>
      </div>
      <div class='row'>
        <div class='cell'>Spam</div>
        <div class='cell'>Eggs</div>
      </div>
    </div>
    <table>
      <tr class'row'><td>Foo</td><td>Bar</td></tr>
      <tr class='row'><td>Spam</td><td>Eggs</td></tr>
    </table>
  </body>
</html>

a) これが機能しない特定の理由があるかどうか (w3c/HTML 仕様の観点から) と、b) ドラッグ可能なテーブル行を取得する正しい方法は何かを考えていました。

境界線の折りたたみと行の高さのアルゴリズムがあるため、実際のテーブルが好きです。これらのことを実行できる代替手段はすべてうまく機能します。

4

6 に答える 6

35

JQuery UI で表の行をドラッグ可能にする方法もあります。あなたがする必要があるのは、次のようにドラッグしている行をホストするテーブルを含む新しいdivを返す関数にヘルパーオプションを設定することだけです:

helper: function(event){
return $('<div class="drag-cart-item"><table></table></div>').find('table').append($(event.target).closest('tr').clone()).end();
},

ヒントについては、David Petersen に感謝します: http://blog.petersendidit.com/post/drag-table-row-to-a-div-with-jquery/

于 2010-02-09T19:25:45.083 に答える
22

本当に表形式のデータがある場合は、実際にテーブルに固執する必要があります。

また、テーブル内で行をドラッグする場合、このJQuery + "ドラッグ可能な行テーブル" ライブラリは FireFox3 で完全に機能します

于 2008-11-21T05:08:32.427 に答える
11

誰かが私と同じ間違いを犯した場合に備えて:

テーブル内の TR をドラッグして並べ替えたい場合は、.draggable ではなく .sortable が必要です。

私だけ?

于 2012-04-18T13:07:06.590 に答える
1

JqueryUI を次のように使用して、この作業を行いました。

$(function() {
  $(".sortable").sortable({
    revert: true
  });
});
table td {
  border: solid 1px black;
}
table {
  border-collapse: collapse;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<table>
  <tbody class="sortable">
    <tr>
      <td>1</td>
      <td>One</td>
      <td>some text</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Two</td>
      <td>some text</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Three</td>
      <td>some text</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Four</td>
      <td>some text</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Five</td>
      <td>some text</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Six</td>
      <td>some text</td>
    </tr>
  </tbody>
</table>

于 2012-08-23T13:12:31.040 に答える
0

css を設定することもtr.ui-draggable-dragging {display: block}できます。この方法で行をドラッグできますが、座標の計算は不十分です。この問題の適切な解決策はまだ見つかりません。

于 2012-01-20T12:57:47.090 に答える