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)位置示例代碼
- 在頁面中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)文章
仿淘寶TAB切換搜索框搜索切換的相關(guān)內(nèi)容
這是一款仿淘寶TAB切換搜索框,想搜索哪方面的內(nèi)容就切換到哪一個(gè),非常實(shí)用,喜歡的朋友可以看看2014-09-09
JavaScript輸入分鐘、秒倒計(jì)時(shí)技巧總結(jié)(附代碼)
這篇文章主要介紹了JavaScript輸入分鐘、秒倒計(jì)時(shí)的代碼實(shí)現(xiàn),通過css和js代碼展示了邏輯過程,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。2017-08-08
JavaScript實(shí)現(xiàn)防止網(wǎng)頁被嵌入Frame框架的代碼分享
這篇文章主要介紹了JavaScript實(shí)現(xiàn)防止網(wǎng)頁被嵌入Frame框架的代碼分享,本文給出了2種防嵌入方法,需要的朋友可以參考下2014-12-12
JavaScript實(shí)現(xiàn)tab欄切換的效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)tab欄切換的效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
js實(shí)現(xiàn)鍵盤控制DIV移動(dòng)的方法
這篇文章主要介紹了js實(shí)現(xiàn)鍵盤控制DIV移動(dòng)的方法,以實(shí)例形式完整的講述了js控制div移動(dòng)所涉及的css、js與html使用技巧,需要的朋友可以參考下2015-01-01
JavaScript實(shí)現(xiàn)左右滾動(dòng)電影畫布
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)左右滾動(dòng)電影畫布,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02
js實(shí)現(xiàn)帶圓角的兩級(jí)導(dǎo)航菜單效果代碼
這篇文章主要介紹了js實(shí)現(xiàn)帶圓角的兩級(jí)導(dǎo)航菜單效果代碼,涉及javascript鼠標(biāo)事件及頁面元素樣式動(dòng)態(tài)變換技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08

