使用可拖动 Javascript 时获取上一个元素的 ID

时间:2021-03-01 20:10:41

标签: javascript draggable

如何从对象被移动的位置而不是被删除的位置获取 div 的 ID?我已经使用这个非常简单的示例来展示我如何获取它所在的当前 ID,但我希望文本在徽标位于右侧框中时显示 div1 - 因为这是它作为父元素的最后一个元素。

附注。这是我在这里的第二篇文章,所以如果您能评论我如何改进我的问题,我会非常高兴。

function allowDrop(ev) {
  ev.preventDefault();
}

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

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));
  ev.dataTransfer.setData("text", ev.currentTarget.id);
  var t= ev.currentTarget.id;
  document.getElementById("info").innerHTML=t;
  
}
#div1, #div2 {
  float: left;
  width: 100px;
  height: 35px;
  margin: 10px;
  padding: 10px;
  border: 1px solid black;
}
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
  <img src="https://stackoverflow.design/assets/img/logos/so/logo-stackoverflow.svg" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31">
</div>

<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div id="info">This is where I want to know from where the element has been moved.</div>

1 个答案:

答案 0 :(得分:1)

你在哪里...

ev.target.appendChild(document.getElementById(data));

替换为...

var elementBeingDragged = document.getElementById(data);
var previousDiv = elementBeingDragged.parentNode; // Get parent DIV before
ev.target.appendChild(elementBeingDragged); // Appending it to new DIV

以下几行不是必需的,但表明previousDiv 是它的来源及其id

previousDiv.style.backgroundColor = "red";
console.log(previousDiv.id);

function allowDrop(ev) {
  ev.preventDefault();
}

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

function drop(ev) {
  ev.preventDefault();
  var data = ev.dataTransfer.getData("text");
  var elementBeingDragged = document.getElementById(data);
  var previousDiv = elementBeingDragged.parentNode; // Get parent DIV before
  ev.target.appendChild(elementBeingDragged); // Appending it to new DIV

  previousDiv.style.backgroundColor = "red";
  console.log(previousDiv.id);

  ev.dataTransfer.setData("text", ev.currentTarget.id);
  var t= ev.currentTarget.id;
  document.getElementById("info").innerHTML=t;
  
}
#div1, #div2 {
  float: left;
  width: 100px;
  height: 35px;
  margin: 10px;
  padding: 10px;
  border: 1px solid black;
}
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
  <img src="https://stackoverflow.design/assets/img/logos/so/logo-stackoverflow.svg" draggable="true" ondragstart="drag(event)" id="drag1" width="88" height="31">
</div>

<div id="div2" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<div id="info">This is where I want to know from where the element has been moved.</div>

相关问题