使用Selection和Range控制輸入框光標位置

項目背景:聊天功能,在一個可編輯的div內,@人員后光標位置應該在人員后面
關鍵代碼
輸入框按下@時記錄range和selection
sel = window.getSelection()
range = sel.getRangeAt(0)
刪除輸入框中的@,因為要使用a標簽包裹的@(<a>@張三</a>)
設置一個range范圍,刪除@
range.setStart(range.endContainer, range.startOffset)
range.setEnd(range.endContainer, range.startOffset + 1)
range.deleteContents()
插入新的包含a標簽的node,frag中包含2個節點,a標簽和空格
range.insertNode(frag)
重新設置光標位置,lastNode是空格,文本節點
光標位置在空格后面,偏移量是1個字符
range.setStart(lastNode,1)
range.setEnd(lastNode,1)
清除所有其他range,添加應用新range
sel.removeAllRange()
sel.addRange()

其他提示:插入a標簽后繼續輸入內容時,如果a標簽沒有href屬性,將導致輸入的內容也在a標簽內,反之,輸入的內容是一個新的文本

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容