textarea在鼠标位置插入文本,替换选中文本

// 获取textarea光标位置 和 选中文本
const getTextareaCursor = (textarea: any):void => {
  console.log(textarea)
  let rangeData:any = {
    text: '',
    start: 0,
    end: 0
  }
  if (textarea.setSelectionRange) {
    textarea.focus()
    rangeData.start = textarea.selectionStart
    rangeData.end = textarea.selectionEnd
    rangeData.text = (rangeData.start !== rangeData.end) ? textarea.value.substring(rangeData.start, rangeData.end) : ''
  } else if ((document as any).selection) { // IE
    textarea.focus();
    let i:number = 0
    let oS:any = (document as any).selection.createRange()
    let oR:any = (document as any).body.createTextRange()
    oR.moveToElementText(textarea)
    rangeData.text = oS.text
    rangeData.bookmark = oS.getBookmark()
    for (i = 0; oR.compareEndPoints('StartToStart', oS) < 0 && oS.moveStart('character', -1) !== 0; i++) {
      if (textarea.value.charAt(i) === '/r') {
        i++
      }
    }
    rangeData.start = i
    rangeData.end = rangeData.text.length + rangeData.start
  }
  return rangeData
}
// 设置光标回原先位置 在插入文本时调用
const setTextareaCursor = (textarea:any, rangeData:any) => {
  let oR, start, end
  textarea.focus()
  if (textarea.setSelectionRange) {
    textarea.setSelectionRange(rangeData.start, rangeData.end)
  } else if (textarea.createtextRange) { // IE
    oR = textarea.createTextRange()
    if (textarea.value.length === rangeData.start) {
      oR.collapse(false)
      oR.select()
    } else {
      oR.moveToBookmark(rangeData.bookmark)
      oR.select()
    }
  }
}
// 在获取的光标位置插入指定文本 或 替换选定文本
const addTextareaCursor = (textarea:any, cursor:any, text:string) => {
  // textarea 容器; cursor:光标位置和选中内容; text:要插入的文本
  let oValue, nValue, oR, nStart, nEnd, st
  const sR:any = ''
  setTextareaCursor(textarea, cursor) // 调用获取位置
  if (textarea.setSelectionRange) {
    oValue = textarea.value
    nValue = oValue.substring(0, cursor.start) + text + oValue.substring(cursor.end)
    nStart = nEnd = cursor.start + text.length
    st = textarea.scrollTop
    textarea.value = nValue
    if (textarea.scrollTop !== st) {
      textarea.scrollTop = st
    }
    textarea.setSelectionRange(nStart, nEnd)
  } else if (textarea.createTextRange) { // IE
    sR.document.selection.createRange();
    sR.text = text
    sR.select()
  }
}

export { getQueryString, getTextareaCursor, setTextareaCursor, addTextareaCursor }

 

转载于:https://my.oschina.net/lpcysz/blog/3014313

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值