JavaScript中在光標(biāo)處插入添加文本標(biāo)簽節(jié)點(diǎn)的詳細(xì)方法
正確的方法是正確運(yùn)用Selection對(duì)象和Range對(duì)象,實(shí)現(xiàn)在光標(biāo)當(dāng)前位置插入文本或結(jié)點(diǎn)。但是這兩個(gè)對(duì)象在IE和標(biāo)準(zhǔn)的DOM方式的運(yùn)用方法是不同的。
思路:首先獲得用戶的選區(qū)(光標(biāo)當(dāng)前位置可理解成起始和終止位置一樣的選區(qū))。然后,從Selection對(duì)象轉(zhuǎn)成Range對(duì)象。目的是利用Range對(duì)象的方法插內(nèi)容進(jìn)去。最后,插入動(dòng)作結(jié)束后將光標(biāo)移到插入內(nèi)容的后面。
var sel = win.document.selection; //IE var sel = win.getSelection(); //DOM var range = sel.createRange(); // IE下 var range = sel.getRangeAt(0); // DOM下 if(range.startContainer){ // DOM下 sel.removeAllRanges(); // 刪除Selection中的所有Range range.deleteContents(); // 清除Range中的內(nèi)容 // 獲得Range中的第一個(gè)html結(jié)點(diǎn) var container = range.startContainer; // 獲得Range起點(diǎn)的位移 var pos = range.startOffset; // 建一個(gè)空Range range = document.createRange(); // 插入內(nèi)容 var cons = win.document.createTextNode(",:),"); if(container.nodeType == 3){// 如是一個(gè)TextNode container.insertData(pos, cons.nodeValue); // 改變光標(biāo)位置 range.setEnd(container, pos + cons.nodeValue.length); range.setStart(container, pos + cons.nodeValue.length); }else{// 如果是一個(gè)HTML Node var afternode = container.childNodes[pos]; container.insertBefore(cons, afternode); range.setEnd(cons, cons.nodeValue.length); range.setStart(cons, cons.nodeValue.length); } sel.addRange(range); }else{// IE下 var cnode = range.parentElement(); while(cnode.tagName.toLowerCase() != “body”){ cnodecnode = cnode.parentNode; } if(cnode.id && cnode.id==”rich_txt_editor”){ range.pasteHTML(",:),"); } } win.focus();
innerHTML 和 pasteHTML 區(qū)別
innerHTML 是一個(gè)屬性,可以取得或者設(shè)定該元素內(nèi)的 HTML 內(nèi)容,可以是任意能包含 HTML 子節(jié)點(diǎn)的元素都使用它
pasteHTML()是一個(gè)方法,在指定的文字區(qū)域內(nèi)替換該區(qū)域內(nèi)的文本或者HTML,該方法必須應(yīng)用于一個(gè) createTextRange() 或者 document.selection.createRange() 創(chuàng)建的區(qū)域上
var oRange = document.selection.createRange(); if(oRange.text!=''){ var oHtml = '<a href="#" rel="external nofollow" target=_blank>oRange.text</a>'; oRange.pasteHTML(oHtml); }
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- JavaScript自定義文本框光標(biāo)
- Javascript實(shí)現(xiàn)獲取及設(shè)置光標(biāo)位置的方法
- js光標(biāo)定位文本框回車表單提交問題的解決方法
- JS在可編輯的div中的光標(biāo)位置插入內(nèi)容的方法
- js實(shí)現(xiàn)獲取焦點(diǎn)后光標(biāo)在字符串后
- js獲取光標(biāo)位置和設(shè)置文本框光標(biāo)位置示例代碼
- 在頁(yè)面中js獲取光標(biāo)/鼠標(biāo)的坐標(biāo)及光標(biāo)的像素坐標(biāo)
- js切換光標(biāo)示例代碼
- js/html光標(biāo)定位的實(shí)現(xiàn)代碼
- javascript textarea光標(biāo)定位方法(兼容IE和FF)
相關(guān)文章
javascript實(shí)現(xiàn)二級(jí)級(jí)聯(lián)菜單的簡(jiǎn)單制作
這篇文章主要介紹了javascript實(shí)現(xiàn)二級(jí)級(jí)聯(lián)菜單的簡(jiǎn)單制作,感興趣的小伙伴們可以參考一下2015-11-11js下關(guān)于onmouseout、事件冒泡的問題經(jīng)驗(yàn)小結(jié)
第3次遇到這個(gè)問題,于是總結(jié)了一下,將此短文發(fā)在首頁(yè),希望對(duì)瀏覽器事件機(jī)制有所了解的大俠們給予解答2010-12-12TypeScript裝飾器與反射元數(shù)據(jù)實(shí)例詳解
TypeScript的裝飾器為我們提供了一種強(qiáng)大的工具,可以在運(yùn)行時(shí)改變類的行為,通過理解裝飾器的工作原理,我們可以創(chuàng)造更加強(qiáng)大、靈活且易于維護(hù)的應(yīng)用,這篇文章主要介紹了TypeScript裝飾器與反射元數(shù)據(jù),需要的朋友可以參考下2023-09-09JavaScript使用高階生成器進(jìn)行過濾以生成素?cái)?shù)
生成器大家都知道是怎么一回事,但是高階生成器又是什么東西呢,下面小編就來為大家簡(jiǎn)單介紹一下如何使用高階生成器進(jìn)行過濾以生成素?cái)?shù)吧2024-02-02一個(gè)JavaScript獲取元素當(dāng)前高度的實(shí)例
這篇文章主要為大家介紹了一個(gè)JavaScript獲取元素當(dāng)前高度的實(shí)例,比較實(shí)用,建議新手朋友們可以看看2014-10-10js實(shí)現(xiàn)checkbox全選、不選與反選的方法
這篇文章主要介紹了js實(shí)現(xiàn)checkbox全選、不選與反選的方法,以實(shí)例形式詳細(xì)分析了實(shí)現(xiàn)的思路及對(duì)應(yīng)的html與js代碼的實(shí)現(xiàn)過程,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02javascript實(shí)現(xiàn)簡(jiǎn)單打字游戲
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡(jiǎn)單打字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10javascript簡(jiǎn)單鏈?zhǔn)秸{(diào)用案例分析
這篇文章主要介紹了javascript簡(jiǎn)單鏈?zhǔn)秸{(diào)用,結(jié)合具體實(shí)例形式模擬jQuery分析了鏈?zhǔn)秸{(diào)用的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-05-05解決在layer.open中使用時(shí)間控件laydate失敗的問題
今天小編就為大家分享一篇解決在layer.open中使用時(shí)間控件laydate失敗的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09