DataTransferItemList:length 属性

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

DataTransferItemList 接口的只读属性 length 返回当前拖动项列表中项目的数量。

列表中拖动项的数量,如果列表为空或禁用则为 0。如果列表的 DataTransfer 对象未与拖动数据存储关联,则认为拖动项列表被禁用。

示例

这个示例演示了 length 属性的用法。

JavaScript

js
function dragstart_handler(ev) {
  console.log("拖动开始");
  // 将此元素的 id 添加到拖动负载中,以便拖动处理器知道要将哪个元素添加到其树中
  const dataList = ev.dataTransfer.items;
  dataList.add(ev.target.id, "text/plain");
  // 将其他的一些元素添加到拖动负载中
  dataList.add("<p>段落……</p>", "text/html");
  dataList.add("http://www.example.org", "text/uri-list");
}

function drop_handler(ev) {
  console.log("放置");
  ev.preventDefault();
  const data = ev.dataTransfer.items;
  // 循环遍历放置的元素,并记录它们的数据
  for (let i = 0; i < data.length; i++) {
    if (data[i].kind === "string" && data[i].type.match("^text/plain")) {
      // 该项目为目标节点
      data[i].getAsString((s) => {
        ev.target.appendChild(document.getElementById(s));
      });
    } else if (data[i].kind === "string" && data[i].type.match("^text/html")) {
      // 放置的数据项为 HTML
      data[i].getAsString((s) => {
        console.log(`……放置:HTML = ${s}`);
      });
    } else if (
      data[i].kind === "string" &&
      data[i].type.match("^text/uri-list")
    ) {
      // 放置的数据项为 URI
      data[i].getAsString((s) => {
        console.log(`……放置:URI = ${s}`);
      });
    }
  }
}

function dragover_handler(ev) {
  console.log("拖至上方");
  ev.preventDefault();
  // 将放置效果(dropEffect)设置为移动(move)
  ev.dataTransfer.dropEffect = "move";
}

function dragend_handler(ev) {
  console.log("拖动结束");
  const dataList = ev.dataTransfer.items;
  // 清除剩余的拖动数据
  dataList.clear();
}

HTML

html
<div>
  <p
    id="source"
    ondragstart="dragstart_handler(event);"
    ondragend="dragend_handler(event);"
    draggable="true">
    选中此元素,拖动它到放置区域,然后取消选中以移动元素。
  </p>
</div>
<div
  id="target"
  ondrop="drop_handler(event);"
  ondragover="dragover_handler(event);">
  放置区域
</div>

CSS

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

#source {
  color: blue;
  border: 1px solid black;
}

#target {
  border: 1px solid black;
}

结果

规范

Specification
HTML
# dom-datatransferitemlist-length-dev

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
length

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support