Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

DataTransfer

Baseline Widely available

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

Das DataTransfer-Objekt wird verwendet, um Daten zu speichern, die zwischen Kontexten übertragen werden, wie z.B. bei Drag-and-Drop-Operationen oder Lese-/Schreibvorgängen in der Zwischenablage. Es kann einen oder mehrere Datenobjekte enthalten, von denen jedes eine oder mehrere Datentypen hat.

DataTransfer wurde ursprünglich für die HTML Drag and Drop API als DragEvent.dataTransfer-Eigenschaft konzipiert und ist immer noch im HTML-Drag-and-Drop-Bereich spezifiziert. Es wird jedoch jetzt auch von anderen APIs genutzt, wie etwa ClipboardEvent.clipboardData und InputEvent.dataTransfer. Allerdings nutzen andere APIs nur bestimmte Teile seiner Schnittstelle und ignorieren Eigenschaften wie dropEffect. Die Dokumentation zu DataTransfer wird hauptsächlich seine Verwendung bei Drag-and-Drop-Operationen besprechen, und Sie sollten in der Dokumentation der anderen APIs nachsehen, wie DataTransfer in diesen Kontexten genutzt wird.

Konstruktor

DataTransfer()

Erstellt und gibt ein neues DataTransfer-Objekt zurück.

Instanz-Eigenschaften

DataTransfer.dropEffect

Ruft die Art der derzeit ausgewählten Drag-and-Drop-Operation ab oder setzt die Operation auf einen neuen Typ. Der Wert muss none, copy, link oder move sein.

DataTransfer.effectAllowed

Bietet alle möglichen Arten von Operationen. Muss einer von none, copy, copyLink, copyMove, link, linkMove, move, all oder uninitialized sein.

DataTransfer.files Schreibgeschützt

Enthält eine Liste aller lokalen Dateien, die beim Datentransfer verfügbar sind. Wenn die Drag-Operation nicht das Ziehen von Dateien umfasst, ist diese Eigenschaft eine leere Liste.

DataTransfer.items Schreibgeschützt

Gibt ein DataTransferItemList-Objekt, das eine Liste aller Drag-Daten ist.

DataTransfer.types Schreibgeschützt

Ein Array von Zeichenfolgen, die die Formate angeben, die im dragstart-Ereignis gesetzt wurden.

Instanz-Methoden

DataTransfer.addElement() Experimentell Nicht standardisiert

Setzt die Drag-Quelle für das angegebene Element. Dies wird das Element sein, bei dem drag- und dragend-Ereignisse ausgelöst werden, und nicht das Standardziel (das zu ziehende Element). Spezifisch für Firefox.

DataTransfer.clearData()

Entfernt die Daten, die mit einem bestimmten Typ assoziiert sind. Das Typ-Argument ist optional. Wenn der Typ leer oder nicht angegeben ist, werden die Daten, die mit allen Typen assoziiert sind, entfernt. Wenn es keine Daten für den angegebenen Typ gibt oder der Datentransfer keine Daten enthält, hat diese Methode keine Wirkung.

DataTransfer.getData()

Ruft die Daten für einen bestimmten Typ ab oder eine leere Zeichenfolge, wenn keine Daten für diesen Typ existieren oder der Datentransfer keine Daten enthält.

DataTransfer.setData()

Setzt die Daten für einen bestimmten Typ. Wenn keine Daten für den Typ vorhanden sind, werden sie am Ende hinzugefügt, sodass das letzte Element in der Typenliste das neue Format ist. Wenn Daten für den Typ bereits vorhanden sind, werden die vorhandenen Daten an derselben Position ersetzt.

DataTransfer.setDragImage()

Setzt das Bild, das beim Ziehen verwendet werden soll, falls ein kundenspezifisches Bild erwünscht ist.

Beispiele

Jede in diesem Dokument aufgelistete Methode und Eigenschaft hat ihre eigene Referenzseite, und jede Referenzseite enthält entweder direkt ein Beispiel der Schnittstelle oder hat einen Link zu einem Beispiel.

Lesen der Daten in einem Einfüge- oder Drop-Ereignis

Im folgenden Beispiel haben wir ein <form>, das drei verschiedene Arten von Texteingaben enthält: ein Text-<input>-Element, ein <textarea>-Element und ein <div>-Element mit contenteditable auf true gesetzt. Der Benutzer kann Text in eines dieser Elemente einfügen oder ziehen, und die Daten im ClipboardEvent.clipboardData oder DragEvent.dataTransfer-Objekt werden angezeigt.

HTML

html
<form>
  <fieldset>
    <legend>&lt;input /></legend>
    <input type="text" />
    <table class="center">
      <tbody>
        <tr>
          <th scope="row">Operation type</th>
          <td></td>
        </tr>
        <tr>
          <th scope="row">Content type</th>
          <td></td>
        </tr>
      </tbody>
    </table>
  </fieldset>
  <fieldset>
    <legend>&lt;textarea /></legend>
    <textarea></textarea>
    <table class="center">
      <tbody>
        <tr>
          <th scope="row">Operation type</th>
          <td></td>
        </tr>
        <tr>
          <th scope="row">Content type</th>
          <td></td>
        </tr>
      </tbody>
    </table>
  </fieldset>
  <fieldset>
    <legend>&lt;div contenteditable /></legend>
    <div contenteditable></div>
    <table class="center">
      <tbody>
        <tr>
          <th scope="row">Operation type</th>
          <td></td>
        </tr>
        <tr>
          <th scope="row">Content type</th>
          <td></td>
        </tr>
      </tbody>
    </table>
  </fieldset>
  <p class="center">
    <input type="reset" />
  </p>
</form>

CSS

css
.center {
  text-align: center;
}

form > fieldset > * {
  vertical-align: top;
}
form input,
form textarea,
form [contenteditable] {
  min-width: 15rem;
  padding: 0.25rem;
}
[contenteditable] {
  appearance: textfield;
  display: inline-block;
  min-height: 1rem;
  border: 1px solid;
}

form table {
  display: inline-table;
}
table ol {
  text-align: left;
}

JavaScript

js
const form = document.querySelector("form");

function displayData(event) {
  if (event.type === "drop") event.preventDefault();

  const cells = event.target.nextElementSibling.querySelectorAll("td");
  cells[0].textContent = event.type;
  const transfer = event.clipboardData || event.dataTransfer;
  const ol = document.createElement("ol");
  cells[1].textContent = "";
  cells[1].appendChild(ol);
  for (const item of transfer.items) {
    const li = document.createElement("li");
    li.textContent = `${item.kind} ${item.type}`;
    ol.appendChild(li);
  }
}

form.addEventListener("paste", displayData);
form.addEventListener("drop", displayData);
form.addEventListener("reset", () => {
  for (const cell of form.querySelectorAll("[contenteditable], td")) {
    cell.textContent = "";
  }
});

Ergebnis

Spezifikationen

Specification
HTML
# the-datatransfer-interface

Browser-Kompatibilität

Siehe auch