You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何获取被拖拽释放的div的type属性并修改drop函数

解决方案

前置优化建议(可选,更符合HTML规范)

type不是div标签的原生标准属性,直接使用可能存在潜在的属性冲突风险,更推荐用HTML标准的自定义data属性存储自定义标识,你只需要把div的属性调整为data-type即可,示例:

<div id='3' data-type='touchMyDiv'>
<div id='6' data-type='otherType'>

如果你不想修改现有属性定义,直接读取type属性也可以正常运行。

实现逻辑

你只需要在drop函数中拿到拖拽元素的ID后,先获取对应的DOM对象,再读取对应的属性值作为变量即可,后续可以根据这个变量的值走不同的业务分支。

修改后的完整代码

方案1:drop阶段读取DOM属性(改动最小)

function allowDrop(ev) {
  ev.preventDefault();
}
function drag(ev) {
  ev.dataTransfer.setData("text", ev.target.id);
}
function drop(ev) {
    ev.preventDefault();
    var contentID = ev.dataTransfer.getData("text");
    // 获取拖拽元素DOM对象
    const dragElement = document.getElementById(contentID);
    // 读取type属性,如果你用了data-type,这里改为 dragElement.dataset.type
    const divType = dragElement.getAttribute('type');
    ev.target.appendChild(dragElement);

    // 后续可以根据divType做不同逻辑,示例:
    if (divType === 'touchMyDiv') {
        window.location.href = "/?a=deleteTable&tableID=" + contentID;
    } else if (divType === 'otherType') {
        // 其他类型的业务逻辑,比如跳转到其他地址
        window.location.href = "/?a=otherHandle&tableID=" + contentID;
    }
}

方案2:drag阶段存储属性(性能更优,无需drop阶段查询DOM)

如果你不想在drop的时候再查询DOM,可以在拖拽开始时就把ID和type一起存入传输对象:

function allowDrop(ev) {
  ev.preventDefault();
}
function drag(ev) {
  // 把ID和type序列化后存入
  const dragData = {
    id: ev.target.id,
    type: ev.target.getAttribute('type')
  }
  ev.dataTransfer.setData("text", JSON.stringify(dragData));
}
function drop(ev) {
    ev.preventDefault();
    // 解析传输的数据
    const dragData = JSON.parse(ev.dataTransfer.getData("text"));
    const contentID = dragData.id;
    const divType = dragData.type;
    const dragElement = document.getElementById(contentID);
    ev.target.appendChild(dragElement);

    // 后续业务逻辑和方案1一致
    if (divType === 'touchMyDiv') {
        window.location.href = "/?a=deleteTable&tableID=" + contentID;
    }
}

内容的提问来源于stack exchange,提问作者Chris98

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:45:03