js获取文本框光标位置、操作光标setSelectionRange,selectionStart,selectionEnd

关键点:

获取antd组件包裹的原生textArea实例:const textarea = expressInputRef.current.resizableTextArea.textArea;

获取光标位置:const { selectionStart, selectionEnd } =textarea;

设置光标位置:expressInputRef.current.resizableTextArea.textArea.setSelectionRange(4,4);

文本框聚焦:expressInputRef.current.focus();

不使用setTimeout,光标会跳到输入框末尾,使用 setTimeout 是为了在浏览器执行渲染后,延迟执行光标位置设置。这确保了在 value 更新后,光标可以正确地重新定位到你设置的位置

 

 

1. 绑定textArea的ref

<TextArea maxLength={31} placeholder="请输入表达式" ref={expressInputRef} />

2.获取实例,获取光标位置、设置光标位置

const addExpress = (symbol) => {
    expressInputRef.current.focus();
    const textarea = expressInputRef.current.resizableTextArea.textArea;
    if (!!textarea && textarea === document.activeElement) {
      const { selectionStart, selectionEnd } = textarea;
      console.log(selectionStart, 'selectionStart');
      // const str = (form.getFieldValue('express') || '').concat(symbol);
      const str =
        (form.getFieldValue('express') || '').substring(0, selectionStart) +
        symbol +
        (form.getFieldValue('express') || '').substring(selectionStart);

      form.setFieldValue('express', str);
      form.validateFields(['express']);

      //不使用setTimeout,光标会跳到输入框末尾,使用 setTimeout 是为了在浏览器执行渲染后,延迟执行光标位置设置。这确保了在 value 更新后,光标可以正确地重新定位到你设置的位置
      setTimeout(() => {
        // 将光标设置到指定的位置(需获取原生的textarea)
        expressInputRef.current.resizableTextArea.textArea.setSelectionRange(
          selectionStart + symbol?.length,
          selectionStart + symbol?.length
        );
      });
    }
  };

 

posted @   SimoonJia  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示