DataTransfer.getData() 方法

admin發表於2019-10-10

通過DataTransfer 物件可以從源元素向目標元素傳遞資料。

DataTransfer.getData() 方法可以獲取所傳遞的指定型別資料。

如果不存在指定型別的資料,那麼返回一個空字串。

關於DataTransfer物件總體介紹參閱DataTransfer 物件一章節。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
dataTransfer.getData(format)

引數解析:

(1).format:規定要返回資料的型別。

關於format資料型別更多內容可以參閱DataTransfer.setData()一章節。

程式碼例項如下:

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
p{
  width:100px;
  height:50px;
  background-color:red;
}
#box {
  width:300px; 
  height:100px;
  background-color:#ccc;
}
</style>
<script>
window.onload = (ev) => {
  let odiv=document.getElementById("box");
  let op=document.getElementById("p");
  
  op.ondragstart = (ev) => {
    ev.dataTransfer.setData("Text",ev.target.id);
    ev.dataTransfer.setData("text/uri-list","http://www.softwhy.com/ant.jpg");
  }
  
  odiv.ondragover = (ev) => {
    ev.preventDefault();
  }
  
  odiv.ondrop = (ev) => {
    ev.preventDefault();
    ev.stopPropagation();
    let data=ev.dataTransfer.getData("Text");
    ev.target.appendChild(document.getElementById(data));
  }
}
</script>
</head>
<body>
<p draggable="true" id="p"></p>
<div id="box"></div>
</body>
</html>

上述程式碼可以將p元素拖動到底部div中,下面分析如下:

(1).將P元素拖拽到底部的DIV元素之中。

(2).因此不要以為通過DataTransfer傳遞的就是P元素。

(3).通過setData()方法設定了兩個不同型別的資料。

(4).但是我們在drop事件處理函式中僅獲取型別為"Text"的資料,也就是p的id屬性值。

[HTML] 純文字檢視 複製程式碼執行程式碼
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>螞蟻部落</title>
<style type="text/css">
#box {
  width:300px; 
  height:100px;
  background-color:#ccc;
}
.over {
  border: 1px dashed #000;
  transform: scale(0.8, 0.8);
}
</style>
<script>
window.onload = () =>{
  let odiv=document.getElementById("box");
 
  odiv.ondragenter = (ev) => {
    ev.target.classList.add('over');
  }
  odiv.ondragover = (ev) => {
    ev.preventDefault();
  }
  odiv.ondragleave = (ev) => {
    ev.target.classList.remove('over');
  }
  odiv.ondrop = (ev) => {
    ev.preventDefault();
    ev.stopPropagation();
    ev.target.classList.remove('over');
    let text = ev.dataTransfer.getData('text');
    ev.target.innerHTML=text;
  }
}
</script>
</head>
<body>
<p id="p">螞蟻部落位於青島市南區</p>
<div id="box"></div>
</body>
</html>

上述程式碼可以將選中的文字寫入底部的div元素中。

可以看到,我們沒有使用setData()方法設定傳遞資料,但是依然可以獲取。

傳遞資料的設定系統幫我們自動完成,從作業系統拖拽檔案到瀏覽器也是如此。

相關文章