DataTransfer
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Das DataTransfer-Objekt speichert Daten, die zwischen Kontexten übertragen werden, beispielsweise bei einer Drag-and-Drop-Operation oder beim Lesen und Schreiben über die Zwischenablage. Es kann ein oder mehrere Datenelemente enthalten, die jeweils einem oder mehreren Datentypen angehören.
DataTransfer wurde ursprünglich vor allem für die HTML Drag and Drop API als Eigenschaft DragEvent.dataTransfer entwickelt und ist weiterhin im Abschnitt zu HTML Drag and Drop spezifiziert. Inzwischen wird es jedoch auch von anderen APIs verwendet, etwa von ClipboardEvent.clipboardData und InputEvent.dataTransfer. Diese APIs verwenden allerdings nur bestimmte Teile der Schnittstelle und ignorieren Eigenschaften wie dropEffect. Diese Dokumentation behandelt hauptsächlich die Verwendung von DataTransfer bei Drag-and-Drop-Operationen. Informationen zur Verwendung in anderen Kontexten finden Sie in der Dokumentation der jeweiligen APIs.
Konstruktor
DataTransfer()-
Erstellt ein neues
DataTransfer-Objekt und gibt es zurück.
Instanzeigenschaften
DataTransfer.dropEffect-
Gibt den Typ der aktuell ausgewählten Drag-and-Drop-Operation zurück oder legt einen neuen Typ fest. Der Wert muss
none,copy,linkodermovesein. DataTransfer.effectAllowed-
Gibt alle zulässigen Operationstypen an. Der Wert muss
none,copy,copyLink,copyMove,link,linkMove,move,alloderuninitializedsein. DataTransfer.filesSchreibgeschützt-
Enthält eine Liste aller lokalen Dateien, die bei der Datenübertragung verfügbar sind. Wenn bei der Drag-Operation keine Dateien gezogen werden, ist diese Liste leer.
DataTransfer.itemsSchreibgeschützt-
Gibt ein
DataTransferItemList-Objekt zurück, das alle Drag-Daten auflistet. DataTransfer.typesSchreibgeschützt-
Ein Array von Zeichenfolgen mit den Formaten, die beim
dragstart-Ereignis festgelegt wurden.
Instanzmethoden
DataTransfer.addElement()-
Legt das angegebene Element als Quelle der Drag-Operation fest. Auf diesem Element werden die Ereignisse
dragunddragendausgelöst, statt auf dem standardmäßigen Zielelement (dem gezogenen Knoten). Firefox-spezifisch. DataTransfer.clearData()-
Entfernt die Daten, die einem bestimmten Typ zugeordnet sind. Das Typ-Argument ist optional. Wenn der Typ leer oder nicht angegeben ist, werden die Daten aller Typen entfernt. Sind für den angegebenen Typ keine Daten vorhanden oder enthält die Datenübertragung keine Daten, hat diese Methode keine Wirkung.
DataTransfer.getData()-
Ruft die Daten für einen bestimmten Typ ab. Sind für diesen Typ keine Daten vorhanden oder enthält die Datenübertragung keine Daten, wird eine leere Zeichenfolge zurückgegeben.
DataTransfer.setData()-
Legt die Daten für einen bestimmten Typ fest. Sind für den Typ noch keine Daten vorhanden, werden sie am Ende hinzugefügt, sodass das neue Format der letzte Eintrag in der Liste der Typen ist. Sind bereits Daten für den Typ vorhanden, werden sie an derselben Position ersetzt.
DataTransfer.setDragImage()-
Legt ein benutzerdefiniertes Bild fest, das beim Ziehen verwendet werden soll.
Beispiele
Jede hier aufgeführte Methode und Eigenschaft hat eine eigene Referenzseite. Jede dieser Seiten enthält entweder direkt ein Beispiel für die Schnittstelle oder einen Link zu einem Beispiel.
Daten bei einem Einfüge- oder Drop-Ereignis lesen
Im folgenden Beispiel enthält ein <form> drei unterschiedliche Arten von Texteingaben: ein <input>-Element für Text, ein <textarea>-Element und ein <div>-Element, bei dem contenteditable auf true gesetzt ist. Sie können Text in jedes dieser Elemente einfügen oder dort ablegen. Anschließend werden die Daten aus dem Objekt ClipboardEvent.clipboardData beziehungsweise DragEvent.dataTransfer angezeigt.
HTML
<form>
<fieldset>
<legend><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><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><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
.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
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
| Spezifikation |
|---|
| HTML> # the-datatransfer-interface> |