DataTransferItemList

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.

Das DataTransferItemList-Objekt ist eine Liste von DataTransferItem-Objekten, die Elemente darstellen, die gezogen werden. Während eines Ziehvorgangs hat jedes DragEvent eine dataTransfer-Eigenschaft und diese Eigenschaft ist eine DataTransferItemList.

Die einzelnen Elemente können mit der Klammernotation [] zugegriffen werden.

DataTransferItemList wurde primär für die HTML Drag and Drop API entworfen und wird immer noch im HTML-Bereich des Drag & Drop spezifiziert, aber es wird jetzt auch von anderen APIs verwendet, wie z.B. ClipboardEvent.clipboardData und InputEvent.dataTransfer. Die Dokumentation von DataTransferItemList wird hauptsächlich seine Verwendung in Drag-and-Drop-Vorgängen besprechen, und Sie sollten die Dokumentation der anderen APIs für die Verwendung von DataTransferItemList in diesen Kontexten konsultieren.

Diese Schnittstelle hat keinen Konstruktor.

Instanzeigenschaften

DataTransferItemList.length Nur lesbar

Ein unsigned long, das die Anzahl der Ziehelemente in der Liste ist.

Instanzmethoden

DataTransferItemList.add()

Fügt ein Element (entweder ein File-Objekt oder eine Zeichenkette) zur Ziehelementliste hinzu und gibt ein DataTransferItem-Objekt für das neue Element zurück.

DataTransferItemList.remove()

Entfernt das Ziehelement aus der Liste an der angegebenen Stelle.

DataTransferItemList.clear()

Entfernt alle Ziehelemente aus der Liste.

Beispiel

Dieses Beispiel zeigt, wie man Drag and Drop verwendet.

JavaScript

js
function dragstartHandler(ev) {
  console.log("dragStart");

  // Add this element's id to the drag payload so the drop handler will
  // know which element to add to its tree
  const dataList = ev.dataTransfer.items;
  dataList.add(ev.target.id, "text/plain");

  // Add some other items to the drag payload
  dataList.add("<p>Paragraph…</p>", "text/html");
  dataList.add("http://www.example.org", "text/uri-list");
}

function dropHandler(ev) {
  console.log("Drop");
  ev.preventDefault();

  // Loop through the dropped items and log their data
  for (const item of ev.dataTransfer.items) {
    if (item.kind === "string" && item.type.match(/^text\/plain/)) {
      // This item is the target node
      item.getAsString((s) => {
        ev.target.appendChild(document.getElementById(s));
      });
    } else if (item.kind === "string" && item.type.match(/^text\/html/)) {
      // Drag data item is HTML
      item.getAsString((s) => {
        console.log(`… Drop: HTML = ${s}`);
      });
    } else if (item.kind === "string" && item.type.match(/^text\/uri-list/)) {
      // Drag data item is URI
      item.getAsString((s) => {
        console.log(`… Drop: URI = ${s}`);
      });
    }
  }
}

function dragoverHandler(ev) {
  console.log("dragOver");
  ev.preventDefault();

  // Set the dropEffect to move
  ev.dataTransfer.dropEffect = "move";
}

function dragendHandler(ev) {
  console.log("dragEnd");
  const dataList = ev.dataTransfer.items;

  // Clear any remaining drag data
  dataList.clear();
}

HTML

html
<div>
  <p
    id="source"
    ondragstart="dragstartHandler(event);"
    ondragend="dragendHandler(event);"
    draggable="true">
    Select this element, drag it to the Drop Zone and then release the selection
    to move the element.
  </p>
</div>
<div
  id="target"
  ondrop="dropHandler(event);"
  ondragover="dragoverHandler(event);">
  Drop Zone
</div>

CSS

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

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

#target {
  border: 1px solid black;
}

Ergebnis

Spezifikationen

Specification
HTML Standard
# the-datatransferitemlist-interface

Browser-Kompatibilität

BCD tables only load in the browser