直接操作DOM的話比較簡單,還有一種特殊情況:shadow dom的粘貼事件
就需要先拿到真實DOM: 使用定時器setTimeout()去獲取就可以了
input.addEventListener('paste', event => {
event.preventDefault();
let pasteValue=(event.clipboardData || window.clipboardData).getData('text');
document.execCommand('insertText', false, pasteValue);//火狐瀏覽器
// document.getSelection().createRange().pasteHTML(pasteValue);//谷歌瀏覽器
// window.getSelection().getRangeAt(0).insertNode(pasteValue);//火狐瀏覽器
});
除了上面的光標插入文本,還有另外一種方法,就是直接修改input的值(e.target.value)
注意:粘貼過程中可能會有覆蓋粘貼,可以使用selection去處理,我這裏使用的是input光標位置來獲取被覆蓋的內容
//第一種
const selection = window.getSelection();
if (!selection.rangeCount) return false;
selection.deleteFromDocument();
selection.getRangeAt(0).insertNode(document.createTextNode(paste));
//第二種
inputValue = e.target.value;//獲取input值,用來處理覆蓋粘貼
e.target.value =
inputValue.slice(0,input.selectionStart) +
pasteValue +
inputValue.slice(input.selectionEnd, inputValue.length);