此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

DataTransfer:items 属性

基线 广泛可用

自 2018年4月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

DataTransfer 接口的 items 只读属性返回表示拖拽操作中的数据传输项列表 对象的 DataTransferItemList 对象,每个被拖拽的对象对应一个列表项。如果拖拽操作中没有数据,则列表为空。

示例

记录被拖拽的项目

本示例使用 items 来记录被拖拽项目的信息。

HTML

html
<ul>
  <li id="source1" draggable="true">将项目一拖拽到可放置区域</li>
  <li id="source2" draggable="true">将项目二拖拽到可放置区域</li>
</ul>
<div id="target">可放置区域</div>

<button id="reset">重置</button>

CSS

css
div {
  margin: 0em;
  padding: 2em;
}

#target {
  border: 1px solid black;
}

JavaScript

js
function dragstartHandler(ev) {
  console.log(`dragstart: target.id = ${ev.target.id}`);
  // 将此元素的 id 添加到拖拽负载中,以便放置处理器知道将哪个元素添加到树中
  ev.dataTransfer.setData("text/plain", ev.target.id);
  ev.dataTransfer.effectAllowed = "move";
}

function dropHandler(ev) {
  ev.preventDefault();
  // 获取目标的 id 并将移动的元素添加到目标的 DOM 中
  const data = ev.dataTransfer.getData("text");
  ev.target.appendChild(document.getElementById(data));
  // 打印每个项目的“kind”和“type”
  if (ev.dataTransfer.items) {
    for (const item of ev.dataTransfer.items) {
      console.log(`kind = ${item.kind}, type = ${item.type}`);
    }
  }
}

function dragoverHandler(ev) {
  ev.preventDefault();
  // 设置 dropEffect 为 move
  ev.dataTransfer.dropEffect = "move";
}

const source1 = document.querySelector("#source1");
const source2 = document.querySelector("#source2");
const target = document.querySelector("#target");

source1.addEventListener("dragstart", dragstartHandler);
source2.addEventListener("dragstart", dragstartHandler);
target.addEventListener("dragover", dragoverHandler);
target.addEventListener("drop", dropHandler);

const reset = document.querySelector("#reset");
reset.addEventListener("click", () => document.location.reload());

结果

规范

规范
HTML
# dom-datatransfer-items-dev

浏览器兼容性

参见