DataTransfer: setData() Methode
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.
Die DataTransfer.setData()
Methode setzt die Drag-Daten der Zieh-Operation auf die angegebenen Daten und den Typ. Wenn keine Daten für den angegebenen Typ existieren, wird dieser am Ende des Drag-Datenspeichers hinzugefügt, so dass das letzte Element in der types
Liste der neue Typ sein wird. Wenn Daten für den angegebenen Typ bereits existieren, werden die existierenden Daten an derselben Position ersetzt. Das heißt, die Reihenfolge der types
Liste wird nicht geändert, wenn Daten desselben Typs ersetzt werden.
Beispiele für Datentypen sind text/plain
und text/uri-list
.
Syntax
setData(format, data)
Parameter
format
-
Ein String, der den Typ der Drag-Daten darstellt, die zum
DataTransfer
hinzugefügt werden sollen. data
-
Ein String, der die Daten darstellt, die zum
DataTransfer
hinzugefügt werden sollen.
Rückgabewert
Keiner (undefined
).
Beispiele
Ziehen eines Elements
In diesem Beispiel können wir ein <p>
Element in ein Ziel-<div>
Element ziehen.
-
Im
dragstart
-Handler verwenden wirsetData()
, um dieid
des<p>
Elements zumDataTransfer
Objekt hinzuzufügen. -
Im
drop
-Handler rufen wir dieid
ab und verwenden sie, um das<p>
Element in das Ziel zu verschieben.
HTML
<div>
<p id="source" 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">Drop Zone</div>
<button id="reset">Reset example</button>
CSS
div {
margin: 0.5em 0;
padding: 2em;
}
#target,
#source {
border: 1px solid black;
padding: 0.5rem;
}
.dragging {
background-color: pink;
}
JavaScript
const source = document.querySelector("#source");
source.addEventListener("dragstart", (ev) => {
console.log("dragStart");
// Change the source element's background color
// to show that drag has started
ev.currentTarget.classList.add("dragging");
// Clear the drag data cache (for all formats/types)
ev.dataTransfer.clearData();
// Set the drag's format and data.
// Use the event target's id for the data
ev.dataTransfer.setData("text/plain", ev.target.id);
});
source.addEventListener("dragend", (ev) =>
ev.target.classList.remove("dragging"),
);
const target = document.querySelector("#target");
target.addEventListener("dragover", (ev) => {
console.log("dragOver");
ev.preventDefault();
});
target.addEventListener("drop", (ev) => {
console.log("Drop");
ev.preventDefault();
// Get the data, which is the id of the source element
const data = ev.dataTransfer.getData("text");
const source = document.getElementById(data);
ev.target.appendChild(source);
});
const reset = document.querySelector("#reset");
reset.addEventListener("click", () => document.location.reload());
Ergebnis
Spezifikationen
Specification |
---|
HTML # dom-datatransfer-setdata-dev |