Html5在表格单元格之间和单元格内拖动项目
Html5 dragging items across and within table cells
我正在使用Html5 draggable将项目拖放到不同的表格单元格中:
http://jsfiddle.net/d1wnk1bg/6/<table border="1">
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
</tr>
<tr>
<td><span class="event" id="item1" draggable="true">Item 1</span>
</td>
<td><span class="event" id="item2" draggable="true">Item 2</span>
<span class="event" id="item3" draggable="true">Item 3</span>
</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
$(document).ready(function(){
$('.event').on("dragstart", function (event) {
var dt = event.originalEvent.dataTransfer;
dt.setData('Text', $(this).attr('id'));
});
$('table td').on("dragenter dragover drop", function (event) {
event.preventDefault();
if (event.type === 'drop') {
var data = event.originalEvent.dataTransfer.getData('Text',$(this).attr('id'));
de=$('#'+data).detach();
de.appendTo($(this));
};
});
})
这种方法的唯一问题是,如果您将'Item 1'拖到'Item 2'和'Item 3'所在的单元格中,Item 1被附加到末尾。
我如何修改这一点,使'Item 1'可以添加在'Item 2'之前或'Item 2'和'Item 3'之间?我试着进入嵌套拖拽的兔子洞,但很快就放弃了,希望有一个更简单的方法!
我fork了Fiddle并稍微调整了一下代码:
http://jsfiddle.net/gL88q17m/1/$(document).ready(function () {
$('.event').on("dragstart", function (event) {
var dt = event.originalEvent.dataTransfer;
dt.setData('Text', $(this).attr('id'));
});
$('table td').on("dragenter dragover drop", function (event) {
event.preventDefault();
if (event.type === 'drop') {
var data = event.originalEvent.dataTransfer.getData('Text', $(this).attr('id'));
de = $('#' + data).detach();
if (event.originalEvent.target.tagName === "SPAN") {
de.insertBefore($(event.originalEvent.target));
}
else {
de.appendTo($(this));
}
};
});
})
我所做的是检查项是否被直接放入到td中,在这种情况下,被删除的元素将被插入到所有其他条目之后,或者如果它被放置在另一项的顶部,在这种情况下,该项被插入到被删除的项之前。
在td中添加一些内边距可以更容易地将一个项目直接放入td中,即使里面已经有3个项目。
table th, table td {
width: 200px;
height:70px;
padding: 5px;
}
table span {
display:block;
background-color: #ccc;
border: 1px solid black;
color: fff;
height: 30px;
width: 100%;
}
看了你的评论后,我做了一些改变。现在,它正发挥着神奇的作用。我推荐你读这本书。
$(document).ready(function () {
$(".event").on("dragstart",function(event){
var dt = event.originalEvent.dataTransfer;
var node = event.target;
dt.setData('text/html', node.innerHTML);
dt.setData('text/plain',node.id);
event.stopPropagation();
});
$(".event").on("dragend",function(e){
event.preventDefault();event.stopPropagation();
})
$(".row>td").on("dragenter dragover dragleave",function(e){
event.preventDefault();event.stopPropagation();
})
$(".row > td").on("drop",function(event){
var dragObjId = event.originalEvent.dataTransfer.getData("text/plain");
var data = $("#"+dragObjId);
var dropTarget = $(event.target).closest("td");
$(dropTarget).prepend(data);
});
})
$(document).ready(function() {
$(".event").on("dragstart", function(event) {
var dt = event.originalEvent.dataTransfer;
var node = event.target;
dt.setData('text/html', node.innerHTML);
dt.setData('text/plain', node.id);
event.stopPropagation();
});
$(".event").on("dragend", function(e) {
event.preventDefault();
event.stopPropagation();
}) $(".row>td").on("dragenter dragover dragleave", function(e) {
event.preventDefault();
event.stopPropagation();
}) $(".row > td").on("drop", functiwww.ta3roof.com / on(event) {
var dragObjId = event.originalEvent.dataTransfer.getData("text/plain");
var data = $("#" + dragObjId);
var dropTarget = $(event.target).closest("td");
$(dropTarget).prepend(data);
});
})
相关文章:
- 使用自动保存功能拖放表格单元格
- 禁用jQuery UI中可拖动的x或y管理单元
- jquery-ui sortable:如何在拖动时不添加单元格
- 拒绝拖放到表格的第一个子单元格
- 如何在当前行中突出显示拖动开始和拖动结束之间的所有单元格,拖动只能是当前选择行
- 使用重拨和拖动禁用空单元格的拖放功能
- jqGrid-拖动一行进行排序会打乱单元格宽度
- 鼠标拖动时高亮显示单行的表格单元格
- jQuery Sortable插件对表格单元格收缩,同时拖动
- 拖放动态生成的两个表之间的所有单元格
- 如何在表格中创建可拖动单元格
- ExtJS 5:电子表格拖动选择显示单元格工具提示
- 用鼠标拖动选择对角线的表格单元格
- 如何在拖放单元格内容时获取标题单元格名称
- 在网格中垂直拖放单元格
- 网格单元格到单元格的拖放
- 拖放表-将单元格移动到不同的列
- 使用动手表获取单元格数据
- Html5在表格单元格之间和单元格内拖动项目
- 有没有简单的方法来拖放单元格从一个表到另一个表