1 todoFilter(e) { 2 e.preventDefault(); 3 if (!e.target.getAttribute('contenteditable')) { 4 return; 5 } 6 const cpTxt = e 7 .clipboardData 8 .getData('text'); 9 10 const selection = window.getSelection ? window.getSelection() : document.selection; 11 if (!selection.rangeCount) return; 12 const range = selection.createRange ? selection.createRange() : selection.getRangeAt(0); 13 window._range = range; 14 if (!window.getSelection) { 15 range.pasteHTML(cpTxt); 16 range.collapse(false); 17 range.select(); 18 } else { 19 range.collapse(false); 20 const hasR = range.createContextualFragment(cpTxt); 21 let hasR_lastChild = hasR.lastChild; 22 while (hasR_lastChild && hasR_lastChild.nodeName.toLowerCase() == 'br' && hasR_lastChild.previousSibling && hasR_lastChild.previousSibling.nodeName.toLowerCase() == 'br') { 23 var e = hasR_lastChild; 24 hasR_lastChild = hasR_lastChild.previousSibling; 25 hasR.removeChild(e); 26 } 27 range.insertNode(hasR); 28 if (hasR_lastChild) { 29 range.setEndAfter(hasR_lastChild); 30 range.setStartAfter(hasR_lastChild); 31 } 32 selection.removeAllRanges(); 33 selection.addRange(range); 34 } 35 },