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 富文本编辑器中保持光标在最后位置。


