当前位置: 首页 > article >正文

前端vue+el-input实现输入框中文字高亮标红效果(学习自掘金博主文章)

学习自掘金文章https://juejin.cn/post/7295169886177918985

该博主的代码基于原生textarea控件和js实现,基于该博主的代码和思路,在vue下实现了相应功能

思路

生成html字符串来实现文字高亮标红效果,但是input输入控件不能渲染html字符串,那就用div来渲染html字符串,将输入框的背景和文字设置为透明,层级设置在div上面,这样用户输入时操作的是输入框,渲染时用的是下面的div。

代码

 <div class="main">
            <div
              class="highlight-div"
              v-html="highlightBracketContent(inputData)"
            ></div>
            <el-input
              class="highlight-input"
              v-model="inputData"
              type="textarea"
              :autosize="{ minRows: 6 }"
              resize="none"
            ></el-input>
          </div>

我的项目中需求是把括号内的内容标红

methods: {
    /** 生成中英文括号内标红的html字符串 */
    highlightBracketContent(inputText) {
	      // 匹配中英文括号内的内容(包括中文括号和英文括号)
	      const regex = /([((])(.*?)([))])/g;

      // 使用正则替换匹配到的文本,并加上红色标记
      const result = inputText.replace(
        regex,
        function (match, openBracket, content, closeBracket) {
          // openBracket 是左括号,content 是括号内的内容,closeBracket 是右括号
          if (content.includes("该数据内容仅供参考")) {
            return `${openBracket}<span style="color: red;">${content}</span>${closeBracket}`;
          } else {
            return `${openBracket}<span>${content}</span>${closeBracket}`;
          }
        }
      );
      return result;
    },

样式要注意设置el-textarea样式和div的样式保持一致,不然光标位置有问题

.main {
  position: relative;
}
.highlight-div {
  position: absolute;
  top: 1px;
  left: 1px;
  height: 100%;
  box-sizing: border-box;
  font-size: 14px;
  word-break: break-all;
  white-space: pre-wrap;
  padding: 5px 15px;
  line-height: 1.5;
  color: #909399;
}
::v-deep .highlight-input {
  position: relative;
  width: 100%;
  box-sizing: border-box;
  font-size: 12px;
  background: rgba(0, 0, 0, 0);
  -webkit-text-fill-color: transparent;
  z-index: 999;
  word-break: break-all;
  .el-textarea__inner {
    -webkit-text-fill-color: transparent;
    background: rgba(0, 0, 0, 0);
    font-size: 14px;
    line-height: 1.5;
    color: #fff;
  }
}

我未处理输入框内容过多时滚动和调整输入框大小时的div,因为我直接设置输入框autosize自动调整大小,并且关闭了resize,不允许用户调整输入框大小,有相关需求的可以看下掘金文章,有相应方案和思路。


http://www.kler.cn/a/460348.html

相关文章:

  • ceph文件系统
  • 出现 Error during query execution: StatementCallback; bad SQL grammar 解决方法
  • 关于 PPPOE技术的详细解释
  • (六)vForm 动态表单(数据量大,下拉选卡顿问题)
  • 《HarmonyOS第一课》焕新升级,赋能开发者快速掌握鸿蒙应用开发
  • UE4.27 Android环境下获取手机电量
  • 服务器系统维护与安全配置
  • 黑马商城:MybatisPlus
  • img上的title属性和alt属性的区别是什么?
  • Oracle 数据库 dmp文件从高版本导入低版本的问题处理
  • C++ 环境搭建 - 安装编译器、IDE选择
  • WebRTC音视频通话系统需求(项目预算)
  • ffmpeg 编译+ libx264
  • Golang 的AI 框架库
  • Windows电脑带有日历的桌面备忘记事工具
  • shell脚本的使用
  • 【基础还得练】EM算法中的E
  • 【Qt】信号和槽机制
  • 【MyBatis-Plus】让 MyBatis 更简单高效
  • 【Kafka 消息队列深度解析与应用】
  • 基于zynq在linux下的HDMI实战
  • labelme2yolov8-seg 草稿()
  • 头歌python:多进程和多线程
  • 年会头投票小游戏
  • 强化学习(1)
  • filament的材质系统