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)获取可拖动表格行的正确方法是什么。
我喜欢真正的桌子,因为边框折叠和行高算法 - 任何可以做这些事情的替代方案都可以正常工作。
答案 0 :(得分:35)
有一种方法可以使用JQuery UI使表行可拖动。 你需要做的就是将一个helper选项设置为一个函数,该函数返回一个新的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/
答案 1 :(得分:22)
如果你有真正的表格数据,你应该坚持使用表格。
如果你想在表格中拖动行,这个 JQuery + "draggable row table" library 在FireFox3中完美运作
答案 2 :(得分:11)
以防万一我犯了同样的错误:
如果你想通过拖动它们来重新排序表中的TR,那么.sortable就是你需要的而不是.draggable
只是我?
答案 3 :(得分:3)
这有点晚了,但今天我发现 html5 drag'n drop API 可以正常使用<tr>
元素。您需要做的就是启用它<tr draggable="true">
并注册事件
dragstart
drag
dragenter
dragleave
dragover
drop
dragend
我发现这篇文章非常有用http://www.html5rocks.com/en/tutorials/dnd/basics/
!!请注意,此html5 API存在一个缺陷,即使您只对父元素感兴趣,当您将鼠标悬停在子元素上时也会触发该事件。希望html5rocks人们很快就能解决它。
答案 4 :(得分: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>
答案 5 :(得分:0)
也可以设置css tr.ui-draggable-dragging {display: block}
- 这样可以拖动行,但是,它们的坐标计算不周。我还没有找到解决这个问题的好方法。