antd vue 输入框高亮设置关键字

   <highlight-textareaplaceholder="请输入主诉"type="textarea"v-model="formModel.mainSuit":highlightKey="schema.componentProps.highlightKey"></highlight-textarea>

参考链接原生input,textarea

demo地址

默认为团队组织高亮

效果演示
vue3相关组件修改
<template><div class="highlight-box"><template v-if="type === 'textarea'"><div v-if="value"class="textarea-outer"ref="textareaOuter"><div ref="outerInner" class="outer-inner"v-html="highlightHtml(value)"></div></div><a-textarearef="textareaBox":autoSize="true":placeholder="placeholder"v-model:value="value"></a-textarea></template><template v-if="type === 'input'"><div v-if="value"class="input-outer"v-html="highlightHtml(value)"></div><a-input type="text" class="ant-input":placeholder="placeholder"v-model:value.trim="value"/></template></div>
</template><script >
export default {name: 'HighlightTextarea',data() {return {value: ''};},props: {placeholder: {type: String,required: false,default: '请输入'},text: {type: String,required: false,default: ''},highlightKey: {type: Array,require: false,default: () => ['团队']},type: {type: String,required: true,default: 'textarea'},maxHeight: {type: Number,required: false,default: 220},modelValue: {type: String,default: ''}},watch: {value (v) {console.log(v, 'value 3333')// this.value = this.text.replace(/(^\s*)|(\s*$)/g, '').replace(/<br \/>|<br\/>|<br>/g, '\n');this.$emit("update:modelValue", v);},modelValue: {deep: true,immediate: true,handler(v) {console.log(v, 'modelValue 3333')this.value = v ? this.modelValue : ''},},disabled: {deep: true,immediate: true,handler(v) {// this.editorConfig.readOnly = v// this.$nextTick(() => {//   if (this.editor) v ? this.editor.disable() : this.editor.enable();// })},}},created() {// this.value = this.text.replace(/(^\s*)|(\s*$)/g, '').replace(/<br \/>|<br\/>|<br>/g, '\n');},mounted() {// this.scrollMousewheel();},methods: {highlightHtml(str) {if ((!str || !this.highlightKey || this.highlightKey.length === 0) && this.type !== 'textarea') {return str;}let rebuild = str;if (this.highlightKey.filter(item => ~str.indexOf(item)).length) {let regStr = '';let regExp = null;this.highlightKey.forEach(list => {regStr = this.escapeString(list);regExp = new RegExp(regStr, 'g');rebuild = rebuild.replace(regExp, `<span>${list}</span>`);});}if (this.type === 'textarea') {rebuild = rebuild.replace(/\n/g, '<br/>').replace(/\s/g, '&nbsp;');// textarea有滚动条时,div底部不能和textarea重合,故加一个<br/>// const wrap = this.$refs.textareaBox;// if (wrap && wrap.scrollHeight > this.maxHeight) {//   rebuild = rebuild + '<br/>';// }}return rebuild;},syncScrollTop() {const wrap = this.$refs.textareaBox;const outerWrap = this.$refs.textareaOuter;const outerInner = this.$refs.outerInner;if (wrap.scrollHeight > this.maxHeight && outerInner.scrollHeight !== wrap.scrollHeight) {outerInner.style.height = `${wrap.scrollHeight}px`;}if (wrap.scrollTop !== outerWrap.scrollTop) {outerWrap.scrollTop = wrap.scrollTop;}},// scrollMousewheel() {//   if (this.type === 'input') {//     return;//   }//   this.$nextTick(() => {//     this.eventHandler('add');//   });// },// 处理字符串中可能对正则有影响的字符escapeString(value) {const characterss = ['(', ')', '[', ']', '{', '}', '^', '$', '|', '?', '*', '+', '.'];let str = value.replace(new RegExp('\\\\', 'g'), '\\\\');characterss.forEach(function (characters) {let r = new RegExp('\\' + characters, 'g');str = str.replace(r, '\\' + characters);});return str;},eventHandler(type) {const wrap = this.$refs.textareaBox;if (wrap) {let mousewheelevt = (/Firefox/i.test(navigator.userAgent))? 'DOMMouseScroll' : 'mousewheel';wrap[`${type}EventListener`](mousewheelevt, this.syncScrollTop);wrap[`${type}EventListener`]('scroll', this.syncScrollTop);}}},destroyed() {// this.eventHandler('remove');}
};
</script><style lang="less">
@width: 100%; // 500px
.highlight-box {font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;position: relative;display: flex;//font-size: 12px;width: @width;//position: relative;//color: #333333;background: #ffffff;border-radius: 2px;overflow: hidden;.textarea-outer,.input-outer {box-sizing: border-box;width: @width;position: absolute;top: 0;left: 0;right: 0;border: 1px solid transparent;border-top: 0;// 鼠标事件失效 ie6-10不支持pointer-events: none;cursor: text;span {color: red; // #F27C49}&:hover {border-color: #4C84FF;}}.textarea-outer {overflow-y: auto;//line-height: 20px;word-break: break-all;.outer-inner {padding: 5px 8px;width: 100%;box-sizing: border-box;}}textarea {width: @width;//line-height: 20px;resize: none;}.input-outer,input {width: @width;height: 32px;line-height: 32px;}.input-outer {bottom: 0;padding: 0 8px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;}textarea,input {font-family: 'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;//font-size: 12px;// position: relative;// z-index: 2;// 光标的颜色//color: #333333;// 文本颜色text-shadow: 0 0 0 rgba(0, 0, 0, 0);-webkit-text-fill-color: transparent;background: transparent;border-radius: 2px;border: 1px solid #d9d9d9;padding: 4px 8px;box-sizing: border-box;//&::placeholder {//  -webkit-text-fill-color: #d5d5d5;//}//&:hover {//  border-color: #36cfc9;//}//&:focus {//  border-color:#36cfc9;//  box-shadow: 0 0 0 2px #DBE4FF;//  outline: none;//}}
}
</style>
 使用组件
   <highlight-textareaplaceholder="请输入主诉"type="textarea"v-model="formModel.mainSuit":highlightKey="schema.componentProps.highlightKey" >
// highlightKey 高亮关键字数组 如: ['团队']
// formModel.mainSuit 绑定字段</highlight-textarea>
参考说明 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/452245.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mapbox GL 加载GeoServer底图服务器的WMS source

貌似加载有点慢啊&#xff01;&#xff01; 1 这是底图 2 这是加载geoserver中的地图效果 3源码 3.1 geoserver中的网络请求 http://192.168.10.10:8080/geoserver/ne/wms?SERVICEWMS&VERSION1.1.1&REQUESTGetMap&formatimage/png&TRANSPARENTtrue&STYL…

Ubuntu20.04TLS 连接JBL蓝牙音响连接上却没有播放声音。

第一步&#xff0c;重启蓝牙服务 sudo systemctl restart bluetooth第二步&#xff0c;蓝牙重新连接蓝牙音响。如果已经有声音&#xff0c;那说明需要连接蓝牙的重新加载一下设备。 第三步&#xff0c;如果第二部成功了之后&#xff0c;继续下面操作&#xff0c;如果不成功&a…

【4046倍频电路】2022-5-15

缘由这个频率倍频电路应该调哪个元件呢-嵌入式-CSDN问答

C语言刷题 LeetCode 删除单链表的重复节点 双指针法

题目要求 链表结构&#xff1a;题目中提到的是未排序的链表&#xff0c;链表是由一系列节点组成的&#xff0c;每个节点包含一个值&#xff08;数据&#xff09;和一个指向下一个节点的指针。去重&#xff1a;我们需要遍历链表&#xff0c;删除所有重复的节点&#xff0c;只保…

点亮一个LED(51)

目录 1.LED介绍 2.硬件电路 3.程序设计 3.1.点亮一颗LED 3.2.LED闪烁 3.3.LED流水灯实现 1.LED介绍 发光二极管也具有二极管普遍的特性单向导电性&#xff0c;有阳极和阴极之分 &#xff0c;上图左侧式插件式LED &#xff0c;长的引脚是阳极&#xff1b;左侧是贴片式的带…

基于FPGA的以太网设计(六)

前面分别实现了ARP协议和ICMP协议&#xff0c;但这俩协议都不能进行数据的传输&#xff0c;如果想要用以太网传输数据的话还需要实现UDP协议或者TCP协议&#xff0c;关于二者的差别主要包括以下几点&#xff1a; 1.连接性 TCP是面向连接的协议&#xff0c;它在传输数据之前需…

UICollectionView 的UICollectionReusableView复用 IOS18报错问题记录

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 方法复用报错 报错详情&#xff1a; Terminating app due to uncaught exception NSInternal…

Star Tower:智能合约的安全基石与未来引领者

在区块链技术的快速发展中&#xff0c;智能合约作为新兴的应用形式&#xff0c;正逐渐成为区块链领域的重要组成部分。然而&#xff0c;智能合约的可靠性问题一直是用户最为关心的焦点之一。为此&#xff0c;Star Tower以其强大的技术实力和全面的安全保障措施&#xff0c;为智…

win10下带参执行.exe的几种方法

0 工具准备 vscode&#xff0c;编辑C代码 Code Runner插件&#xff0c;用于生成exe1 生成支持带参处理的.exe C源码如下&#xff1a; #include "stdio.h" #include <stdlib.h>int main(int argc, char *argv[]) {int i;printf("argc : %d\r\n", a…

首创VMware vCenter 8.0U3b 无DNS部署秘籍

哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。 “ 大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…(每天更新不间断,福利不见不散) 第一章、小叙 今天介绍下VMware vCenter 8.0u3b 无DNS部署教…

manjaro kde 磁盘扩容

vmware wprlstatopm 搭建的manjaro kde &#xff0c;初始磁盘太小&#xff08;40G&#xff09;&#xff0c;现在想扩容磁盘空间 &#xff0c;vmware wprlstatopm已从40G调整到140g&#xff0c;manjaro kde 系统却没有变化&#xff0c;请指点manjaro kde 如何磁盘扩容 要在 Man…

【以雅特力AT32为例】CAN过滤器及其原理与邮箱配置

个人认为过滤器的本质就是对ID值&#xff08;局部or全部&#xff09;的比较。 协议层雅特力跟标准CAN略有不同&#xff0c;详见&#xff1a;【雅特力AT32】 MCU CAN入门指南&#xff08;超详细&#xff09; 协议层了解差不多&#xff0c;直接来应用编程实战就好了&#xff0c…

从一个事故中理解 Redis(几乎)所有知识点

作者&#xff1a;看破 一、简单回顾 事故回溯总结一句话&#xff1a; &#xff08;1&#xff09;因为大 KEY 调用量&#xff0c;随着白天自然流量趋势增长而增长&#xff0c;最终在业务高峰最高点期占满带宽使用 100%。 &#xfeff; &#xfeff; &#xff08;2&#xff…

mysql5.7版本用户管理(user表列信息介绍,本质,管理操作),数据库的权限管理(权限列表,权限操作)

目录 用户管理 介绍 user表 介绍 列信息 Host User *_priv authentication_string 用户管理的本质 操作 创建用户 删除用户 修改用户信息 修改密码 自己修改 root用户修改指定用户的密码 数据库的权限 权限列表 给用户授权 查看权限 回收权限 刷新权限 …

GDAL+C#实现矢量多边形转栅格

1. 开发环境测试 参考C#配置GDAL环境&#xff0c;确保GDAL能使用&#xff0c;步骤简述如下&#xff1a; 创建.NET Framework 4.7.2的控制台应用 注意&#xff1a; 项目路径中不要有中文&#xff0c;否则可能报错&#xff1a;can not find proj.db 在NuGet中安装GDAL 3.9.1和G…

【ARM】ARM中断系统详解——以Cortex-A7为例

一、Cortext-A7中断系统简介 Cortex-A7 也有中断向量表&#xff0c;内核有 8 个异常中断&#xff0c;中断向量表也是在代码的最前面。 看起来A7的中断向量表比STM32F103少很多&#xff0c;这是因为STM32F103使用的Cortex-M系列芯片&#xff0c;中断向量表列举出了一款芯片所有…

React Strict DOM:React Native 通用应用程序的未来

Meta宣布发布了 react-strict-dom。从根本上讲&#xff0c;这将改变我们使用 React Native&#xff08;以及在网页上使用 React&#xff09;的方式。它提供了一套统一的 UI 原语&#xff0c;带有样式&#xff0c;可以在网页和移动设备上通用使用&#xff01;现在&#xff0c;“…

package.json 里的 dependencies和devDependencies区别

dependencies&#xff08;依赖的意思&#xff09;&#xff1a; 通过 --save 安装&#xff0c;是需要发布到生产环境的。 比如项目中使用react&#xff0c;那么没有这个包的依赖就会报错&#xff0c;因此把依赖写入dependencies npm install <package-name>// 缩写 np…

【含文档】基于Springboot+Vue的点餐系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

基于直播美颜SDK的实时美颜平台开发指南

随着直播平台的快速发展&#xff0c;用户对视频质量的要求越来越高&#xff0c;尤其是对于美颜效果的需求。为满足这一市场需求&#xff0c;基于直播美颜SDK的实时美颜平台应运而生。本文将探讨如何开发这样一个平台&#xff0c;助力开发者在激烈的竞争中脱颖而出。 一、理解美…