uniapp 富文本editor 如何保留光标在最后面
在使用uniapp的富文本editor组件时,如何在插入内容后保持光标始终停留在文本最后?尝试了setContents和insertDiv等方法,光标总是跳回开头,有没有办法解决这个问题?
        
          2 回复
        
      
      
        在 UniApp 中使用富文本编辑器(如 <editor> 组件)时,要保留光标在最后面,可以通过以下方法实现:
核心思路
通过 JavaScript 操作,在内容更新后,将光标移动到文本末尾。
实现步骤
- 获取编辑器实例:使用 editorContext方法。
- 获取内容高度:通过 getContents或计算内容高度。
- 设置光标位置:使用 setSelection方法,将光标设置在文本末尾。
示例代码
// 在页面或组件中
export default {
  data() {
    return {
      editorCtx: null,
      content: ''
    }
  },
  onEditorReady() {
    // 获取编辑器实例
    uni.createSelectorQuery().select('#editor').context((res) => {
      this.editorCtx = res.context
      // 初始化后设置光标到末尾(可选)
      this.keepCursorAtEnd()
    }).exec()
  },
  methods: {
    // 保持光标在最后
    keepCursorAtEnd() {
      if (!this.editorCtx) return
      
      // 获取内容
      this.editorCtx.getContents({
        success: (res) => {
          const content = res.html || res.text || ''
          const length = content.length
          
          // 设置光标到末尾
          this.editorCtx.setSelection({
            index: length,
            success: () => {
              console.log('光标已移动到末尾')
            }
          })
        }
      })
    },
    
    // 在需要时调用,例如内容更新后
    onContentChange() {
      // 可以在此处添加防抖处理
      this.$nextTick(() => {
        this.keepCursorAtEnd()
      })
    }
  }
}
注意事项
- 防抖处理:内容频繁更新时,建议添加防抖(如 300ms),避免性能问题。
- 异步操作:编辑器方法多为异步,确保在成功回调中操作。
- 平台差异:不同平台(小程序/H5)可能略有差异,需测试验证。
使用场景
- 动态插入内容后保持光标位置
- 表单自动填充后聚焦到末尾
- 聊天输入框保持输入状态
通过以上方法,即可实现在 UniApp 富文本编辑器中保持光标在最后位置。
 
        
       
                     
                   
                    


