如何将节点从一列div拖到另一列

Posted

技术标签:

【中文标题】如何将节点从一列div拖到另一列【英文标题】:How to drag a node from one column div to another 【发布时间】:2020-07-26 11:41:52 【问题描述】:

我已尽力寻找有类似问题的人,虽然他们在外面,但与我需要做的不符。因此,我无法通过阅读他们的答案来解决我的问题。过去 5 个小时的后半部分,我一直在做这件事,我想出了很多我需要做的事情,但我最终遇到了一个我无法弄清楚或解决的问题。

用例是我要动态构建一个“列”。我希望能够将一个项目从 A 列拖到 B 列(反之亦然)。一旦一个项目被拖到另一列,它应该从原始列中删除。

Here 是一个指向 JSFiddle 页面的链接,该页面包含我正在测试的代码。因为它现在就可以完全正常工作一次。当我第二次尝试使用它时,什么也没有发生。我能说的最好的是“handleDragStart”事件侦听器没有第二次触发;因此,当我从 ASP.Net Web 窗体加载时,当我尝试移动第二个项目时,我在浏览器客户端中收到以下错误:Uncaught DOMException: Failed to set the 'outerhtml' property on 'Element': This element has no parent node.

【问题讨论】:

【参考方案1】:

看一下,我只贴了需要的代码

function allowDrop(ev) 
  ev.preventDefault();


function drag(ev) 
  ev.dataTransfer.setData("text", ev.target.id);


function drop(ev) 
  ev.preventDefault();
  var elementId = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(elementId));
.column 
  width: 75px;
  min-height: 50px;
  background-color: #6772E5;
  color: #FFF;
  padding: 8px 12px;
  border: 0;
  border-radius: 4px;
  font-size: 1em;
<div id="columns" style="width: 240px;">
  <div id="columna" class="column" style="float:left;" ondrop="drop(event)" ondragover="allowDrop(event)">
    <header>Unlocked</header>
    <div class="obj" draggable="true" id="a" ondragstart="drag(event)">A</div>
    <div class="obj" draggable="true" id="b" ondragstart="drag(event)">B</div>

  </div>
  <div id="columnb" class="column" style="float:right;" ondragover="allowDrop(event)" ondrop="drop(event)">
    <header>Locked</header>
    <div class="obj" draggable="true" id="c" ondragstart="drag(event)">C</div>
    <div class="obj" draggable="true" id="d" ondragstart="drag(event)">D</div>
  </div>
</div>

注意: 我为每个节点添加了一个id,如果你不喜欢使用id,你可以这样做

var draggedElement;

function allowDrop(ev) 
  ev.preventDefault();


function drag(ev) 
  draggedElement = ev.target;


function drop(ev) 
  ev.preventDefault();
  ev.target.appendChild(draggedElement);
.column 
  width: 75px;
  background-color: #6772E5;
  color: #FFF;
  padding: 8px 12px;
  border: 0;
  border-radius: 4px;
  font-size: 1em;
<div id="columns" style="width: 240px;">
  <div id="columna" class="column" style="float:left;" ondrop="drop(event)" ondragover="allowDrop(event)">
    <header>Unlocked</header>
    <div class="obj" draggable="true" ondragstart="drag(event)">A</div>
    <div class="obj" draggable="true" ondragstart="drag(event)">B</div>

  </div>
  <div id="columnb" class="column" style="float:right;" ondragover="allowDrop(event)" ondrop="drop(event)">
    <header>Locked</header>
    <div class="obj" draggable="true" ondragstart="drag(event)">C</div>
    <div class="obj" draggable="true" ondragstart="drag(event)">D</div>
  </div>
</div>

【讨论】:

谢谢!你是救生员。在我测试它之前我正在阅读它,我认为它不会按照我想要的方式工作。在我看来,您必须从一个节点中删除节点,然后将其添加到另一个节点。我很困惑为什么它有效,但它有效!谢谢:D 之所以有效,是因为 appendChild 将元素移动到新容器中,而不仅仅是复制它。,结帐developer.mozilla.org/en-US/docs/Web/API/Node/appendChild 所以我发现了一个很容易修复的错误,只是想发布它以防将来有人偶然发现它。您的示例允许您将“obj”拖到另一个“obj”上。修复是在 drop 时检查 ev 的元素,超级简单。再次感谢!

以上是关于如何将节点从一列div拖到另一列的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一个表中将数据从一列复制到另一列?

在同一个表中将值从一列复制到另一列

SQL根据条件将值从一列复制到另一列

需要帮助将数据从一列移动到另一列

如何在 OpenOffice 中将一列单元格从一张表插入到另一张表的单个单元格中?

如果满足条件,熊猫将值从一列复制到另一列