JavaScript 中在光標處插入添加文本標籤節點 詳細方法

正確的方法是正確運用Selection對象和Range對象,實如今光標當前位置插入文本或結點。可是這兩個對象在IE和標準的DOM方式的運用方法是不一樣的。 

思路:首先得到用戶的選區(光標當前位置可理解成起始和終止位置同樣的選區)。而後,從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 區別  
innerHTML 是一個屬性,能夠取得或者設定該元素內的 HTML 內容,能夠是任意能包含 HTML 子節點的元素都使用它 

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);
        }
相關文章
相關標籤/搜索