替换问题(摘自:http://blog.csdn.net/pgmsoul/article/details/8306899)
//替换选中文本内容,参数text为要替换的内容
function repaceSelectionText(text) {
//非IE浏览器
if (window.getSelection) {
var sel = window.getSelection();
alert(sel.rangeCount); //选区个数, 通常为 1 .
sel.deleteFromDocument(); //清除选择的内容
var r = sel.getRangeAt(0); //即使已经执行了deleteFromDocument(), 这个函数仍然返回一个有效对象.
var selFrag = r.cloneContents(); //克隆选择的内容
var frag = selFrag.childNodes; //如果执行了deleteFromDocument(), 这个数组长度将会是 0
for (var i = 0; i < frag.length; i++) {
alert(frag[i].nodeName); //枚举选择的对象
}
var h1 = document.createElement('H1'); //生成一个插入对象
h1.innerHTML = text; //设置这个对象的内容
r.insertNode(h1); //把对象插入到选区, 这个操作不会替换选择的内容, 而是追加到选区的后面, 所以如果需要普通粘贴的替换效果, 之前执行deleteFromDocument()函数.
}
else if (document.selection && document.selection.createRange) {
//IE浏览器
var sel = document.selection.createRange(); //获得选区对象
alert(sel.htmlText); //选择区的html文本.
sel.pasteHTML('<h1>标题</h1>'); //粘贴到选区的html内容, 会替换选择的内容.
}
}
2.插入文字
function insertSelectionText(html)
{
if(document.selection && document.selection.createRange)
{
/****这里需要解决IE丢失光标位置的问题,详见核心代码四**************/
document.selection.createRange().pasteHTML(html);
}else{
var selection = document.getSelection();
var range;
if (selection)
{
range = selection.getRangeAt(0);
}else {
range = iframeDocument.createRange();
}
var oFragment = range.createContextualFragment(html),
oLastNode = oFragment.lastChild ;
range.insertNode(oFragment) ;
range.setEndAfter(oLastNode ) ;
range.setStartAfter(oLastNode );
selection.removeAllRanges();//清除选择
selection.addRange(range);
}
}