Jquery Datatable将一行从一个表拖放到另一个表
问题描述:
我正在使用jquery.dataTables.js,我试图从一个表拖放行到另一个,反之亦然,从表2到table1就像这样:http://jsfiddle.net/yf47u/Jquery Datatable将一行从一个表拖放到另一个表
上面的示例是与json,所以我想与我的json示例做同样的工作。
这是我的jsfiddle:http://jsfiddle.net/f7debwj2/12/
HTML:
<br>
<br>
<h1>
table1
</h1><br>
<br>
<table id="example" class="display" width="100%" cellspacing="0">
<thead>
<tr>
<th>First name</th>
<th>Place</th>
<th>Order</th>
</tr>
</thead>
</table>
<br>
<br>
<h1>
table 2
</h1><br>
<br>
<table id="example2" class="display" width="100%" cellspacing="0">
<thead>
<tr>
<th>First name</th>
<th>Place</th>
<th>checkbox</th>
</tr>
</thead>
</table>
的jQuery:
$(document).ready(function() {
var dt = $('#example').dataTable();
dt.fnDestroy();
});
$(document).ready(function() {
var url = 'http://www.json-generator.com/api/json/get/clmDuyndua?indent=2';
var table = $('#example').DataTable({
ajax: url,
createdRow: function(row, data, dataIndex) {
$(row).attr('id', 'row-' + dataIndex);
},
rowReorder: {
dataSrc: 'order',
},
columns: [{
data: 'order'
}, {
data: 'name'
}, {
data: 'place'
}]
});
table.rowReordering();
});
$(document).ready(function() {
var dt = $('#example2').dataTable();
dt.fnDestroy();
});
$(document).ready(function() {
var url = 'http://www.json-generator.com/api/json/get/cnmZgfsBKa?indent=2';
var table = $('#example2').DataTable({
ajax: url,
createdRow: function(row, data, dataIndex) {
$(row).attr('id', 'row-' + dataIndex);
},
rowReorder: {
dataSrc: 'order',
},
columns: [{
data: 'order'
}, {
data: 'name'
}, {
data: 'checkbox'
}]
});
table.rowReordering();
});
$(document).ready(function() {
$('body').on('mouseenter', 'input', function() {
$('.btn').prop('disabled', true);
});
$('body').on('mouseout', 'input', function() {
$('.btn').prop('disabled', false);
});
});
答
这里是我的解决方案,根据您的代码这个问题。可以将行从一个表中拖放到另一个表中,但我不得不动态地更改FirstName列的值,否则表会考虑具有相同FirstName的两行,这会在删除一行时出现问题那些相同的行。一般来说,在这种情况下,表应该有一个唯一的键。
的JavaScript:
var rowCache;
$(document).ready(function() {
var dt = $('#example').dataTable();
dt.fnDestroy();
});
$(document).ready(function() {
var dt = $('#example2').dataTable();
dt.fnDestroy();
});
$(document).ready(function() {
rowCache = [];
var url = 'http://www.json-generator.com/api/json/get/clmDuyndua?indent=2';
var table = $('#example').DataTable({
ajax: url,
createdRow: function(row, data, dataIndex) {
$(row).attr('id', 'row-' + dataIndex);
},
rowReorder: {
dataSrc: 'order',
},
columns: [{
data: 'order'
}, {
data: 'name'
}, {
data: 'place'
}]
});
table.rowReordering();
table.on('mousedown', 'tbody tr', function() {
var $row = $(this);
var r = table.rows(function (i, data) {
return data.order == $row.children().first().text();
});
if (r[0].length > 1)
r = r.rows(r[0][0]);
rowCache.push({ selector: 'example', row: r });
});
table.on('mouseup', mouseUp);
});
$(document).ready(function() {
var url = 'http://www.json-generator.com/api/json/get/cnmZgfsBKa?indent=2';
var table = $('#example2').DataTable({
ajax: url,
createdRow: function(row, data, dataIndex) {
$(row).attr('id', 'row-' + dataIndex);
},
rowReorder: {
dataSrc: 'order',
},
columns: [{
data: 'order'
}, {
data: 'name'
}, {
data: 'checkbox'
}]
});
table.rowReordering();
table.on('mousedown', 'tbody tr', function() {
var $row = $(this);
var r = table.rows(function (i, data) {
return data.order == $row.children().first().text();
});
if (r[0].length > 1)
r = r.rows(r[0][0]);
rowCache.push({ selector: 'example2', row: r });
});
table.on('mouseup', mouseUp);
});
function mouseUp(event)
{
var id = $(document.elementsFromPoint(event.clientX, event.clientY))
.filter('table')
.attr('id');
if (id && event.currentTarget.id != id)
{
rowCache.every(function (el, i) {
if (el.selector != id)
{
var data = el.row.data();
if (data.length > 0) {
if (!data[0].checkbox)
data[0].checkbox = "<input type='checkbox' />"
el.row.remove().draw();
var $target = $("#" + id).DataTable();
if ($target.rows()[0].length > 0)
{
var rowsArray = $target.rows().data().toArray();
data[0].order = rowsArray[rowsArray.length - 1].order + 1;
}
else
data[0].order = 1;
$target.rows.add(data.toArray()).draw();
}
}}
);
}
rowCache = [];
}
$(document).ready(function() {
$('body').on('mouseenter', 'input', function() {
$('.btn').prop('disabled', true);
});
$('body').on('mouseout', 'input', function() {
$('.btn').prop('disabled', false);
});
});
的jsfiddle:http://jsfiddle.net/jahn08/f7debwj2/34/
谢谢你这么多的人对这种帮助,只是2个问题,我可以阻止从表1中拖放到表2?而不是移动整行可以移动一列吗?并取代?示例:将表2中的列位拖放到表1中的位置?并用新数据更新该字段?而不是移动整行?,谢谢。 – Raduken
不客气。第二个问题更详细,需要一些时间来改变例子。考虑到你的目标,有必要应用几乎相同的逻辑,但是应用到单元属性而不是第一行。至于阻塞,当然,可以阻止这种拖放,你只需要从第一个表中删除鼠标事件。这样的事情:http://jsfiddle.net/jahn08/f7debwj2/35/ –
好的np谢谢,我改变了插件,我使用的是官方的数据表,因此可以让你的代码在jsfiddle中工作? :http://jsfiddle.net/f7debwj2/37/谢谢 – Raduken