首頁 >web前端 >js教程 >詳細介紹JavaScript中在遊標處插入新增文字標籤節點的方法

詳細介紹JavaScript中在遊標處插入新增文字標籤節點的方法

黄舟
黄舟原創
2017-03-23 14:31:231765瀏覽

本文主要介紹了JavaScript中在遊標處插入新增文字標籤節點的詳細方法。具有很好的參考價值。下面跟著小編一起來看下吧

正確的方法是正確運用Selection對象和Range對象,實現在遊標目前位置插入文字或結點。但是這兩個物件在IE和標準的DOM方式的運用方法是不同的。

想法:首先取得使用者的選取範圍(遊標目前位置可理解成起始和終止位置相同的選取範圍)。然後,從Selection物件轉成Range物件。目的是利用Range物件的方法插內容進去。最後,插入動作結束後將遊標移到插入內容的後方。

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中的内容 
 // 获得Range中的第一个html结点 
 var container = range.startContainer; 
 // 获得Range起点的位移 
 var pos = range.startOffset; 
 // 建一个空Range 
 range = document.createRange(); 
 // 插入内容 
 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 差異

innerHTML 是一個屬性可以取得或設定該元素內的HTML 內容,可以是任意能包含HTML 子節點的元素都使用它

pasteHTML()是一個方法,在指定的文字區域內取代該區域內的文字或HTML,該方法必須套用於一個createTextRange() 或document.selection.createRange() 建立的區域上

var oRange = document.selection.createRange(); 
 if(oRange.text!=''){ 
 var oHtml = &#39;<a href="#" rel="external nofollow" target=_blank>oRange.text</a>&#39;; 
 oRange.pasteHTML(oHtml); 
 }

以上是詳細介紹JavaScript中在遊標處插入新增文字標籤節點的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn