項(xiàng)目背景:聊天功能筷狼,在一個可編輯的div內(nèi)埂材,@人員后光標(biāo)位置應(yīng)該在人員后面
關(guān)鍵代碼
輸入框按下@時(shí)記錄range和selection
sel = window.getSelection()
range = sel.getRangeAt(0)
刪除輸入框中的@竖独,因?yàn)橐褂胊標(biāo)簽包裹的@(<a>@張三</a>)
設(shè)置一個range范圍竞膳,刪除@
range.setStart(range.endContainer, range.startOffset)
range.setEnd(range.endContainer, range.startOffset + 1)
range.deleteContents()
插入新的包含a標(biāo)簽的node,frag中包含2個節(jié)點(diǎn),a標(biāo)簽和空格
range.insertNode(frag)
重新設(shè)置光標(biāo)位置,lastNode是空格嚣潜,文本節(jié)點(diǎn)
光標(biāo)位置在空格后面垮媒,偏移量是1個字符
range.setStart(lastNode,1)
range.setEnd(lastNode,1)
清除所有其他range,添加應(yīng)用新range
sel.removeAllRange()
sel.addRange()
其他提示:插入a標(biāo)簽后繼續(xù)輸入內(nèi)容時(shí)航棱,如果a標(biāo)簽沒有href屬性睡雇,將導(dǎo)致輸入的內(nèi)容也在a標(biāo)簽內(nèi),反之饮醇,輸入的內(nèi)容是一個新的文本