js光标定位+回显

监听光标变化,并获取变化后的位置

  document.addEventListener("selectionchange", function (e) {
      
      const selection = window.getSelection();
      const range = selection!.getRangeAt(0);
      const startOffset = range.startOffset;
      const endOffset = range.endOffset;
  
      sessionStorage.setItem("startOffset", startOffset.toString());
      sessionStorage.setItem("endOffset", endOffset.toString());
    });

光标回显

function setCursorPosition() {
  const tagId = sessionStorage.getItem("editId") || ""
  const startOffset = sessionStorage.getItem("startOffset") || ""
  const endOffset = sessionStorage.getItem("endOffset") || ""
  if(tagId === "" || startOffset === "" || endOffset === "") return
  
  const selection = window.getSelection();
  const range = document.createRange();
  const element = document.getElementById(tagId);
  const textNode = element?.firstChild;
  if (!textNode) return;
  
  range.setStart(textNode, parseInt(startOffset, 10));
  range.setEnd(textNode, parseInt(endOffset, 10));
  selection!.removeAllRanges();
  selection!.addRange(range);
}

注意,这种写法来定位光标和回显是非常灵活的,只要你是可编辑的状态,就可以定位+回显,和以往的方法不一样,以往的大多只局限于文本域本编辑框,这种方法适用于一切可编辑态。但这里借助了sessionStorage来存储数据和取出数据,所以在代码上有些改动,如果需要使用,请按照自己的业务场景修改

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值