Uncaught TypeError: item.getData is not a function
Uncaught TypeError: item.getData is not a function
我想将剪贴板内容粘贴到html页面。内容是从 ms-word 文件中复制的。包含文字和图像。考虑以下代码:
<div id="pasteArea" contenteditable="True"></div>
<script type="text/javascript">
var pasteArea = document.getElementById('pasteArea');
pasteArea.onpaste = function (event) {
event.preventDefault();
event.stopPropagation();
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
for (index in items) {
var item = items[index];
if(item.kind === 'string'){
console.log(item.getData('text'));
// Getting the error in here!
}
else if(item.kind === 'file'){
// Code for handling images
}
}
}
</script>
我尝试使用 event.clipboardData.getData('text');
,但它获取了整个文本(即跳过了中间的图像)并且文本格式也丢失了。
知道如何处理上述情况吗?谢谢。
您的项目属于 DataTransferItem 类型,因此您应该使用 getAsString() 来检索项目的文本;
此函数将回调函数作为第一个参数:
item.getAsString(str => console.log(str));
您正在寻找 getAsString,它需要回调来处理剪贴板。
https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/getAsString
const pasteArea = document.getElementById('pasteArea');
pasteArea.onpaste = event => {
event.preventDefault();
const { items } = event.clipboardData;
for (const item of items) processClipboard(item)
}
const processClipboard = item => {
if (item.kind === 'string' && item.type === 'text/plain') {
item.getAsString(s => console.log(s))
}
}
div { background-color: #ccc; }
<div id="pasteArea" contenteditable="True">Paste something here</div>
我想将剪贴板内容粘贴到html页面。内容是从 ms-word 文件中复制的。包含文字和图像。考虑以下代码:
<div id="pasteArea" contenteditable="True"></div>
<script type="text/javascript">
var pasteArea = document.getElementById('pasteArea');
pasteArea.onpaste = function (event) {
event.preventDefault();
event.stopPropagation();
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
for (index in items) {
var item = items[index];
if(item.kind === 'string'){
console.log(item.getData('text'));
// Getting the error in here!
}
else if(item.kind === 'file'){
// Code for handling images
}
}
}
</script>
我尝试使用 event.clipboardData.getData('text');
,但它获取了整个文本(即跳过了中间的图像)并且文本格式也丢失了。
知道如何处理上述情况吗?谢谢。
您的项目属于 DataTransferItem 类型,因此您应该使用 getAsString() 来检索项目的文本;
此函数将回调函数作为第一个参数:
item.getAsString(str => console.log(str));
您正在寻找 getAsString,它需要回调来处理剪贴板。
https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/getAsString
const pasteArea = document.getElementById('pasteArea');
pasteArea.onpaste = event => {
event.preventDefault();
const { items } = event.clipboardData;
for (const item of items) processClipboard(item)
}
const processClipboard = item => {
if (item.kind === 'string' && item.type === 'text/plain') {
item.getAsString(s => console.log(s))
}
}
div { background-color: #ccc; }
<div id="pasteArea" contenteditable="True">Paste something here</div>