Vue动态下拉框与值获取技巧
有志者,事竟成!如果你在学习文章,那么本文《Vue实现编辑区动态下拉框与值获取方法》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

本文详解如何在 Vue 应用中,于 `contenteditable` 区域任意光标位置插入响应式下拉框(`<select>`),并通过数据绑定确保多下拉框状态独立、选中值准确获取,避免手动 DOM 操作导致的状态丢失问题。</select>
在 Vue 开发中,直接操作 DOM(如 document.createElement + appendChild)插入 <select> 到 contenteditable 区域虽能实现视觉效果,但会严重破坏 Vue 的响应式机制:新插入的原生 <select> 未与 Vue 实例数据建立绑定,其 v-model 缺失,导致 getDataModel() 获取的永远是初始值(如第一个选项),而非用户真实选择。
根本解法:放弃手动 DOM 插入,改用声明式渲染 + 光标定位逻辑
虽然 Vue 官方不直接支持“在 contenteditable 光标处插入 Vue 组件”,但我们可通过组合策略实现高保真体验:
✅ 推荐架构:混合模式(文本段落 + 内联组件占位符)
将编辑区域抽象为「富文本片段数组」,每个片段为纯文本或下拉框组件实例,并通过 v-for 渲染。配合光标定位 API,实现“点击按钮时,在当前光标位置插入新下拉框”。
以下是优化后的完整实现(Vue 2/3 均适用,以 Vue 2 为例):
<template>
<div>
<!-- 可编辑区域:仅用于纯文本输入(禁用下拉框交互) -->
<div
class="content-editable"
contenteditable="true"
@input="handleTextUpdate"
@click="saveCursorPosition"
ref="editor"
v-html="renderedContent"
></div>
<!-- 下拉框插入按钮 -->
<button @click="insertDropdownAtCursor">+ 插入下拉框</button>
<!-- 数据导出 -->
<button @click="exportDataModel">Get Data Model</button>
<!-- 当前数据模型(调试用) -->
<pre>{{ dataModel }}
? 关键要点说明
- 绝不手动 appendChild 原生 <select>:这会导致 Vue 无法追踪其状态,v-model 失效。
- 用 v-for + 数据驱动渲染:每个下拉框对应 segments 数组中的一个对象,selected 字段天然响应式。
- 光标定位需增强:示例中 insertDropdownAtCursor 为简化版(追加到末尾)。生产环境应:
- 使用 window.getSelection().getRangeAt(0) 获取光标 Range;
- 遍历 segments 计算光标落在第几个文本段之后;
- 调用 this.segments.splice(index, 0, newDropdown) 精准插入。
- 内容提取要分离逻辑:v-html 仅用于展示,真实数据始终来自 this.segments,避免解析 HTML 字符串带来的 XSS 和结构错乱风险。
✅ 最终效果
- 点击「插入下拉框」→ 新增一个受 Vue 管理的 <select>,切换选项实时更新 segments[i].selected;
- 点击「Get Data Model」→ 准确返回所有文本内容 + 每个下拉框的当前选中值;
- 支持无限嵌套文本与下拉框,状态完全隔离、无耦合。
此方案兼顾 Vue 响应式核心思想与富文本编辑需求,是构建表单编辑器、问卷设计器等场景的稳健基础。
好了,本文到此结束,带大家了解了《Vue动态下拉框与值获取技巧》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!
Win10重置缺少分区怎么处理
- 上一篇
- Win10重置缺少分区怎么处理
- 下一篇
- 个人征信查询官网入口快速查
-
- 文章 · 前端 | 1分钟前 | 自定义语法
- JavaScript编译器扩展实现方法
- 399浏览 收藏
-
- 文章 · 前端 | 3分钟前 |
- JavaScript模块导出只读特性解析
- 466浏览 收藏
-
- 文章 · 前端 | 9分钟前 |
- CSS :active伪类如何提升按钮点击效果
- 339浏览 收藏
-
- 文章 · 前端 | 16分钟前 |
- V8引擎堆栈内存分配解析
- 315浏览 收藏
-
- 文章 · 前端 | 19分钟前 |
- JavaScript代码优化技巧与重构方法
- 259浏览 收藏
-
- 文章 · 前端 | 22分钟前 |
- 点击切换内容显示隐藏的JS实现方法
- 270浏览 收藏
-
- 文章 · 前端 | 31分钟前 |
- CSS圆形排列:计算角度与绝对定位坐标
- 388浏览 收藏
-
- 文章 · 前端 | 39分钟前 |
- CSS使用PurgeCSS精简生产环境样式,大幅减小文件体积
- 469浏览 收藏
-
- 文章 · 前端 | 40分钟前 |
- CSS实现Bootstrap模态框全屏显示,调整width与margin值
- 165浏览 收藏
-
- 文章 · 前端 | 49分钟前 |
- HTML空格怎么输入?网页空格技巧分享
- 155浏览 收藏
-
- 文章 · 前端 | 51分钟前 |
- CSS颜色控制Web组件插槽样式方法
- 255浏览 收藏
-
- 文章 · 前端 | 53分钟前 |
- CSS盒子阴影模糊效果详解
- 485浏览 收藏

