JavaScript中在光標處插入添加文本標簽節(jié)點的詳細方法
正確的方法是正確運用Selection對象和Range對象,實現(xiàn)在光標當前位置插入文本或結(jié)點。但是這兩個對象在IE和標準的DOM方式的運用方法是不同的。
思路:首先獲得用戶的選區(qū)(光標當前位置可理解成起始和終止位置一樣的選區(qū))。然后,從Selection對象轉(zhuǎn)成Range對象。目的是利用Range對象的方法插內(nèi)容進去。最后,插入動作結(jié)束后將光標移到插入內(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中的第一個html結(jié)點
var container = range.startContainer;
// 獲得Range起點的位移
var pos = range.startOffset;
// 建一個空Range
range = document.createRange();
// 插入內(nèi)容
var cons = win.document.createTextNode(",:),");
if(container.nodeType == 3){// 如是一個TextNode
container.insertData(pos, cons.nodeValue);
// 改變光標位置
range.setEnd(container, pos + cons.nodeValue.length);
range.setStart(container, pos + cons.nodeValue.length);
}else{// 如果是一個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 是一個屬性,可以取得或者設(shè)定該元素內(nèi)的 HTML 內(nèi)容,可以是任意能包含 HTML 子節(jié)點的元素都使用它
pasteHTML()是一個方法,在指定的文字區(qū)域內(nèi)替換該區(qū)域內(nèi)的文本或者HTML,該方法必須應(yīng)用于一個 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);
}
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
javascript實現(xiàn)二級級聯(lián)菜單的簡單制作
這篇文章主要介紹了javascript實現(xiàn)二級級聯(lián)菜單的簡單制作,感興趣的小伙伴們可以參考一下2015-11-11
js下關(guān)于onmouseout、事件冒泡的問題經(jīng)驗小結(jié)
第3次遇到這個問題,于是總結(jié)了一下,將此短文發(fā)在首頁,希望對瀏覽器事件機制有所了解的大俠們給予解答2010-12-12
TypeScript裝飾器與反射元數(shù)據(jù)實例詳解
TypeScript的裝飾器為我們提供了一種強大的工具,可以在運行時改變類的行為,通過理解裝飾器的工作原理,我們可以創(chuàng)造更加強大、靈活且易于維護的應(yīng)用,這篇文章主要介紹了TypeScript裝飾器與反射元數(shù)據(jù),需要的朋友可以參考下2023-09-09
JavaScript使用高階生成器進行過濾以生成素數(shù)
生成器大家都知道是怎么一回事,但是高階生成器又是什么東西呢,下面小編就來為大家簡單介紹一下如何使用高階生成器進行過濾以生成素數(shù)吧2024-02-02
解決在layer.open中使用時間控件laydate失敗的問題
今天小編就為大家分享一篇解決在layer.open中使用時間控件laydate失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09

