`
wwwwwhg
  • 浏览: 46954 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
文章分类
社区版块
存档分类
最新评论

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”){
		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() 创建的区域上
var oRange = document.selection.createRange();
		if(oRange.text!=''){
	        var oHtml = '<a href="#" target=_blank>oRange.text</a>';
	        oRange.pasteHTML(oHtml);
        }


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics