html 元素变为空

an html element become null

我正在制作国际象棋游戏,我想使用拖放移动棋子。

document.addEventListener("drop", function(event) {
  if (event.target.className == "square") {
    //remove the piece from the original square
    dragged.parentElement.removeChild(dragged);
    //add the piece to the new square
    event.target.appendChild(dragged);
  }
  if (event.target.className == "piece") {
    //remove the piece from the original square
    dragged.parentElement.removeChild(dragged);
    //remove the piece of the new square
    event.target.parentElement.removeChild(event.target);
    //add the piece to the new square
    event.target.parentElement.appendChild(dragged);
  }
})

如果棋子移动的方格为空,则事件目标为方格元素。
如果方格被其他棋子占据,则事件目标是那个棋子。
第一个 if 语句工作正常,但第二个 if 出现问题,当我将棋子添加到新方块时,event.target.parentElement 变为空,从而引发此错误:

无法读取 null 的属性(读取 'appendChild')。

你能帮我解决这个问题吗?谢谢

执行 event.target.parentElement.removeChild(event.target); 后,目标元素不再是子元素,因此它没有父元素。

将父元素保存在一个变量中,以便您可以再次引用它。

document.addEventListener("drop", function(event) {
  if (event.target.className == "square") {
    //remove the piece from the original square
    dragged.parentElement.removeChild(dragged);
    //add the piece to the new square
    event.target.appendChild(dragged);
  }
  if (event.target.className == "piece") {
    //remove the piece from the original square
    dragged.parentElement.removeChild(dragged);
    let parent = event.target.parentElement;
    //remove the piece of the new square
    parent.removeChild(event.target);
    //add the piece to the new square
    parent.appendChild(dragged);
  }
})

event.target.parentElement.removeChild(event.target);

完全删除“event.target”的存在...

解决方案

如果您使用一些以文本形式存储的数据来表示每一个片段

然后您可以将该数据设置为“”,而不是删除子项

你只需在新的正方形上覆盖

..如果问题没有解决Post更多你的代码在哪里会更容易理解