思路:首先得到用戶的選區(光標當前位置可理解成起始和終止位置同樣的選區)。而後,從Selection對象轉成Range對象。目的是利用Range對象的方法插內容進去。最後,插入動做結束後將光標移到插入內容的後面。html
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」){ cnode = cnode.parentNode; } if(cnode.id && cnode.id==」rich_txt_editor」){ range.pasteHTML(",:),"); } } win.focus();
innerHTML 和 pasteHTML 區別
pasteHTML()是一個方法,在指定的文字區域內替換該區域內的文本或者HTML,該方法必須應用於一個 createTextRange() 或者 document.selection.createRange() 建立的區域上 node
var oRange = document.selection.createRange(); if(oRange.text!=''){ var oHtml = '<a href="#" target=_blank>oRange.text</a>'; oRange.pasteHTML(oHtml); }