javascript 选区selection的文字替换和插入方式

  1. 替换问题(摘自: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);

        }
        
 }


转载于:https://my.oschina.net/ososchina/blog/347219

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值