最近在做項目時,有個需求需要改寫鍵盤的backspace事件。
首先是一個可編輯的div,div中含有標簽(li,li為空標簽)也還有文字。
需求問題:
1、刪除文字時,不能刪除前面的空標簽。
2、標簽可以直接刪除。
此處需要重寫鍵盤的backspace事件。代碼如下:
$(document).on("keydown","#txtEditerBox",function (e) { if(e.keyCode === 8){ var selection = window.getSelection(); var range = selection.getRangeAt(0); // 當 光標 集合到 一點 時, range的文檔內容為空,需要 重新指定 選擇前一個節點的最后一個文本為刪除的range文檔 if(range.collapsed){ if(range.startOffset===0){ //range.setStart(range.startContainer.nextElementSibling); //range.setStartOffset(range.startContainer.length); range.start = range.startContainer.previousElementSibling; var id = range.start ? range.start.id:""; $(".c-textarea").find("#"+id).remove(); //range.startOffset = range.startContainer.length; }else{ range.setStartOffset(range.startOffset - 1); range.startOffset = range.startOffset - 1; } } console.log(range); // 刪除當前 Range 對象表示的文檔區域。 range.deleteContents(); e.preventDefault(); e.stopPropagation(); } });