2017-02-28 79 views
1

我使用:从jquery.dataTables.js:https://datatables.netjQuery的数据表拖放从一个表中删除列到另一个

我试图将它从一个表中删除列到另一个。

编辑: 所以基本上我想要做的是:

  • 能够将它从表2滴名字到表格叫列上方
  • 阻力后拖放同样应该从表2

情况下2消失的名称:如果我添加一个新行使用按钮添加新行

  • 我需要能够拖动下降,从表2中的名称转换为列了。

所以基本上我想做一个拖放只是在不在行中的列。

我不想创建一个新行,只需将名称从一个表移动到另一个表。

编辑2:

1 - 是否可以从表#2拖/放倍数值表#1? 不可以,只能拖放1个。 用户点击编辑或添加新行后,只需拖放即可。 所以我可以将名称drom表2替换为列名称表1

2-如果否,则拖动的值应该替换掉它的值吗?

3如果是,它应该如何工作?添加其他值为空的新行? 不需要添加任何行,我们只需要替换列名。

如何将作品: 所以在点击后编辑或添加新行,我将能够从表2中 表拖到一个名称列1.

几个resquests: 如果选择表2中的行,该行应该改变颜色,显示被选中。并在表1列名称中需要删除的位置需要更改颜色以显示用户可以放弃的位置,用户放弃颜色后应该恢复正常。

样品在这里工作: http://plnkr.co/edit/6sbmBzbXDzm4p6CjaVK0?p=preview

$(document).ready(function() { 
 
var dataUrl = 'http://www.json-generator.com/api/json/get/ccTtqmPbkO?indent=2'; 
 
var options = [ 
 
    { key : 'option 1', value : 1 }, 
 
    { key : 'option 2', value : 2 }, 
 
    { key : 'option 3', value : 3 } 
 
]; 
 

 
$(document).ready(function() { 
 
    var $table = $('#example'); 
 
    var dataTable = null; 
 

 
    $table.on('mousedown', 'td .fa.fa-minus-square', function(e) { 
 
    dataTable.row($(this).closest("tr")).remove().draw(); 
 
    }); 
 

 
    $table.on('mousedown.edit', 'i.fa.fa-pencil-square', function(e) { 
 
    enableRowEdit($(this)); 
 
    }); 
 

 
    $table.on('mousedown', 'input', function(e) { 
 
    e.stopPropagation(); 
 
    }); 
 

 
    $table.on('mousedown.save', 'i.fa.fa-envelope-o', function(e) { 
 
    updateRow($(this), true); // Pass save button to function. 
 
    }); 
 

 
    $table.on('mousedown', '.select-basic', function(e) { 
 
    e.stopPropagation(); 
 
    }); 
 

 
    dataTable = $table.DataTable({ 
 
    ajax: dataUrl, 
 
    rowReorder: { 
 
     dataSrc: 'order', 
 
     selector: 'tr' 
 
    }, 
 
    columns: [{ 
 
     data: 'order' 
 
    }, { 
 
     data: 'name' 
 
    }, { 
 
     data: 'place' 
 
    }, { 
 
     data: 'delete' 
 
    }] 
 
    }); 
 

 
    $table.css('border-bottom', 'none') 
 
     .after($('<div>').addClass('addRow') 
 
      .append($('<button>').attr('id', 'addRow').text('Add New Row'))); 
 

 
    // Add row 
 
    $('#addRow').click(function() { 
 
    var $row = $("#new-row-template").find('tr').clone(); 
 
    dataTable.row.add($row).draw(); 
 
    // Toggle edit mode upon creation. 
 
    enableRowEdit($table.find('tbody tr:last-child td i.fa.fa-pencil-square')); 
 
    }); 
 

 
    $('#btn-save').on('click', function() { 
 
    updateRows(true); // Update all edited rows 
 
    }); 
 

 
    $('#btn-cancel').on('click', function() { 
 
    updateRows(false); // Revert all edited rows 
 
    }); 
 

 
    function enableRowEdit($editButton) { 
 
    $editButton.removeClass().addClass("fa fa-envelope-o"); 
 
    var $row = $editButton.closest("tr").off("mousedown"); 
 

 
    $row.find("td").not(':first').not(':last').each(function(i, el) { 
 
     enableEditText($(this)) 
 
    }); 
 

 
    $row.find('td:first').each(function(i, el) { 
 
     enableEditSelect($(this)) 
 
    }); 
 
    } 
 
    
 
    function enableEditText($cell) { 
 
    var txt = $cell.text(); 
 
    $cell.empty().append($('<input>', { 
 
     type : 'text', 
 
     value : txt 
 
    }).data('original-text', txt)); 
 
    } 
 

 
    function enableEditSelect($cell) { 
 
    var txt = $cell.text(); 
 
    $cell.empty().append($('<select>', { 
 
     class : 'select-basic' 
 
    }).append(options.map(function(option) { 
 
     return $('<option>', { 
 
     text : option.key, 
 
     value : option.value 
 
     }) 
 
    })).data('original-value', txt)); 
 
} 
 

 
    function updateRows(commit) { 
 
    $table.find('tbody tr td i.fa.fa-envelope-o').each(function(index, button) { 
 
     updateRow($(button), commit); 
 
    }); 
 
    } 
 

 
    function updateRow($saveButton, commit) { 
 
    $saveButton.removeClass().addClass('fa fa-pencil-square'); 
 
    var $row = $saveButton.closest("tr"); 
 

 
    $row.find('td').not(':first').not(':last').each(function(i, el) { 
 
     var $input = $(this).find('input'); 
 
     $(this).text(commit ? $input.val() : $input.data('original-text')); 
 
    }); 
 

 
    $row.find('td:first').each(function(i, el) { 
 
     var $input = $(this).find('select'); 
 
     $(this).text(commit ? $input.val() : $input.data('original-value')); 
 
    }); 
 
    } 
 
}); 
 

 
$(document).ready(function() { 
 
    \t var url = 'http://www.json-generator.com/api/json/get/bXcKDeAbyq?indent=2'; 
 
     table = $('#example2').DataTable({ 
 
     ajax: url, 
 
     order: [[ 0, "desc" ]], 
 
     rowReorder: { 
 
      dataSrc: 'place', 
 
      selector: 'tr' 
 
     }, 
 
     columns: [ { 
 
      data: 'name' 
 
     }] 
 
     }); 
 

 
    }); 
 
});
div.addRow { 
 
     line-height: 45px; 
 
     background-color: #fff; 
 
     padding-left: 10px; 
 
     border-bottom: 1px solid; 
 
     border-top: 1px solid #e5e5e5; 
 
    }
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<script src="//cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script> 
 
<script src="//cdn.rawgit.com/DataTables/RowReorder/ce6d240e/js/dataTables.rowReorder.js"></script> 
 
<link href="//cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css" rel="stylesheet" /> 
 
<link href="//cdn.datatables.net/rowreorder/1.2.0/css/rowReorder.dataTables.min.css" rel="stylesheet"/> 
 
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" /> 
 
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> 
 

 
<table id="example" class="display" width="100%" cellspacing="0"> 
 
    <thead> 
 
    <tr> 
 
     <th>order</th> 
 
     <th>name</th> 
 
     <th>country</th> 
 
     <th>action</th> 
 
    </tr> 
 
    </thead> 
 
</table> 
 

 
<table id="new-row-template" style="display:none"> 
 
    <tbody> 
 
    <tr> 
 
     <td>999</td> <!-- Use a large number or row might be inserted in the middle --> 
 
     <td>__NAME__</td> 
 
     <td>__COUNTRY__</td> 
 
     <td> 
 
     <i class="fa fa-pencil-square" aria-hidden="true"></i> 
 
     <i class="fa fa-minus-square" aria-hidden="true"></i> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table> 
 
<br> 
 
<div class="pull-right"> 
 
    <button type="button" id="btn-cancel" class="btn btn-default" data-dismiss="modal">Cancel</button> 
 
    <button type="button" id="btn-save" class="btn btn-primary" data-dismiss="modal">Save</button> 
 
</div> 
 

 
<br> 
 
<br> 
 
<h1> 
 
table 2 
 
</h1><br> 
 
<br> 
 
<table id="example2" class="display" width="100%" cellspacing="0"> 
 
    <thead> 
 
    <tr> 
 
     <th> name</th> 
 
    </tr> 
 
    </thead> 
 
</table> 
 

 

 
<br> 
 
<br> 
 
<h1> 
 
table 2 
 
</h1><br> 
 
<br> 
 
<table id="example2" class="display" width="100%" cellspacing="0"> 
 
    <thead> 
 
    <tr> 
 
     <th> name</th> 
 
    </tr> 
 
    </thead> 
 
</table>

回答

3

我已经回答了这个问题在这里:How to drag and drop a column into another

到您的代码一些变化(全球MouseUp事件和第二表MouseDown事件):

var rowChache = []; 

    function mouseUp(event) { 
    var ctrl = $(document.elementsFromPoint(event.clientX, event.clientY)).filter('input.border-highlight'); 

    if (ctrl.length > 0 && rowCache.length > 0) { 
     var el = rowCache[0]; 
     var data = el.row.data(); 

     if (data.length > 0) { 
     ctrl.val(data[0].name); 
     el.row.remove().draw(); 
     } 
    } 

    rowCache = []; 
    $('#example tr td:nth-child(2) input').removeClass('border-highlight'); 
    } 

table.on('mousedown', 'tbody tr', function() { 
var $row = $(this); 

var r = table.rows(function(i, data) { 
    return data.name == $row.children().first().text(); 
}); 

if (r[0].length > 0) { 
    $row.parents('table').find('tr').removeClass('highlight'); 
    $row.addClass('highlight'); 
    $('#example tr td:nth-child(2) input').addClass('border-highlight'); 
} 

    rowCache.push({ 
    row: r 
    }); 
}); 

检查还链接:http://jsfiddle.net/f7debwj2/47/

+0

你好,非常感谢你的工作完美,我可以请求2更多事情?1当我选择列翅它的绿色完美,但是我们可以让那些也能够接收数据的专栏成为现实?另一件事是你可以做一个样本没有presse编辑工作?但请不要删除这一个我也会使用,在几个小时内,我可以给你赏金谢谢,ispaciba :)。 – Raduken

+1

好的。下面是代码的另一个版本,尽管它们的编辑状态和目标列的不断突出显示,但仍有机会替换值:http://jsfiddle.net/jahn08/L3Lhw7jk/1/ –

+0

非常感谢您,能否帮助我在这一个? http://stackoverflow.com/questions/42653929/jquery-datatable-drag-and-drop-changing-bg-after-drop-a-new-name – Raduken

1

你甚至尝试搜索?

https://datatables.net/forums/discussion/30197/add-remove-table-rows-on-drag-and-drop-between-two-datatables

move rows between two datatables

https://gist.github.com/davemo/706167

drag n drop between two tables

Drag/drop between two datatables

最重要的珍闻来自数据表的创建者:

这不是DataTables的一个特性,但是,它应该很有可能使用API​​。具体来说,我会建议使用row()。remove()和row.add()来根据需要删除和添加行。然而,拖放代码将在DataTables外部。

你要么使用https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API或做一些JS,和/或写缺少的功能集成到API,但鉴于上述链接,你会看到人们是如何解决你所描述的同样的问题。而不是行,你会做专栏,我相信它可以被修改完成你想要的。

+0

对不起,这对我来说太难了,我是新手:(如果有人可以帮忙,我会给500分,谢谢 – Raduken

相关问题