You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在VueJS中如何获取v-textarea的selectionStart和selectionEnd属性?

解决Vuetify v-textarea无法获取selectionStart/selectionEnd的问题

问题原因

你直接通过this.$refs.vta访问selectionStart和selectionEnd返回undefined,是因为$refs.vta拿到的是Vuetify的v-textarea组件实例,而非原生的<textarea> DOM元素。这两个属性是原生textarea元素的专属API,组件实例本身并不具备。

解决方案

方法1:通过组件DOM元素查找原生textarea

利用组件的$el属性获取根DOM元素,再通过querySelector定位内部的原生textarea:

emitSelectedPositons() {
  const textareaEl = this.$refs.vta.$el.querySelector('textarea');
  this.$emit('changed', {
      start: textareaEl?.selectionStart,
      end: textareaEl?.selectionEnd
  })
}

使用可选链操作符?.可以避免因DOM未加载完成或元素不存在导致的报错。

方法2:直接访问组件暴露的原生元素(部分Vuetify版本支持)

部分Vuetify版本中,v-textarea组件会直接暴露内部的原生textarea元素,可通过inputElement属性快速获取:

emitSelectedPositons() {
  const textareaEl = this.$refs.vta.inputElement;
  this.$emit('changed', {
      start: textareaEl?.selectionStart,
      end: textareaEl?.selectionEnd
  })
}

注意:该属性的可用性取决于你使用的Vuetify版本,若此方法无效,优先使用方法1。

注意事项

  • 确保在组件挂载完成后访问ref(比如在mounted钩子或用户交互事件中),避免因DOM未渲染完成导致$refs.vta为undefined。
  • 若v-textarea是动态渲染(比如用v-if控制显示),需确保组件已渲染后再执行获取操作。

内容的提问来源于stack exchange,提问作者PurryFury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:05:18