el-input输入框敏感词关键词高亮标红

news/2025/3/14 20:23:40/

 在textarea中输入文本关键字标红,在原有的方案上做了改动,使用了el-input是为了添加一些按键功能 ,原有方案支持input 和 textarea两种类型,有用请采纳。
若依 ruoyi-vue SpringBoot highlight-textarea 输入框敏感词关键词高亮标红(二)_ruoyi textarea-CSDN博客

<template><div class="highlight-box"><div v-if="value" class="textarea-outer" ref="textareaOuter"><div ref="outerInner" class="outer-inner" v-html="highlightHtml(value)"></div></div><el-inputclass="item__input"ref="textareaBox"type="textarea":placeholder="placeholder":autosize="{ minRows: 2 }"v-model.trim="value"@keyup.enter.native="syncScrollTop"@scroll.native="syncScrollTop"></el-input></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: false,default: "textarea"}},created() {this.value = this.text.replace(/(^\s*)|(\s*$)/g, "").replace(/<br \/>|<br\/>|<br>/g, "\n")},mounted() {this.scrollMousewheel()},computed: {},watch: {value(newValue) {this.$emit("change", newValue)}},methods: {highlightHtml(str) {if (!str || !this.highlightKey?.length) return strconst escapeRegExp = string => string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")return this.highlightKey.reduce((acc, keyword) => {const regex = new RegExp(escapeRegExp(keyword), "g")return acc.replace(regex, '<span class="highlight">$&</span>')}, str)},syncScrollTop(event) {if (event) {event.preventDefault()event.stopPropagation()}this.$nextTick(() => {const input = this.$refs.textareaBox?.$el?.querySelector("textarea")const highlightDiv = this.$refs.outerInnerif (input && highlightDiv) {highlightDiv.scrollTop = input.scrollTophighlightDiv.scrollLeft = input.scrollLeft}})},scrollMousewheel() {if (this.type === "input") {return}},// 处理字符串中可能对正则有影响的字符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}},destroyed() {}
}
</script><style lang="scss">
$width: 100%;
.highlight-box {width: 100%;height: 100%;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: 5px;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;text-align: left;span {color: #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 {line-height: 20px;resize: none;text-align: start;word-break: break-all;}.input-outer,input {width: $width;height: 28px;line-height: 28px;}.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;color: #333333;text-shadow: 0 0 0 rgba(0, 0, 0, 0);-webkit-text-fill-color: transparent;background: transparent;line-height: 20px;border-radius: 5px;border: 1px solid #e0e0e0;padding: 4px 8px;box-sizing: border-box;width: 100%;outline: none;&::placeholder {-webkit-text-fill-color: #999999;}&:hover {border-color: #4c84ff;}&:focus {border-color: #4c84ff;box-shadow: 0 0 0 2px #dbe4ff;outline: none;}}
}
</style>


http://www.ppmy.cn/news/1578671.html

相关文章

nextjs15简要介绍以及配置eslint和prettier

目录 一、Next.js 何时使用服务器端渲染&#xff08;SSR&#xff09;&#xff1f;何时使用静态生成&#xff08;SSG&#xff09;&#xff1f; 1、服务器端渲染&#xff08;SSR - getServerSideProps&#xff09; 2、 静态生成&#xff08;SSG - getStaticProps&#xff09; …

常用开源MQ组件对比

文章目录 前言一、常用MQ1.RabbitMQ2.Kafka3.RocketMQ4.ActiveMQ5.Pulsar 二、如何选择总结 前言 常用的开源mq组件有RabbitMQ、Kafka、RocketMQ、ActiveMQ、Pulsar。 一、常用MQ 1.RabbitMQ 特点&#xff1a; 基于 Erlang&#xff0c;支持 AMQP 协议&#xff0c;提供 丰富的…

Django系列教程(4)——实例项目任务管理小应用

目录 第一步&#xff1a;创建tasks应用&#xff0c;加入INSTALLED_APPS 第二步&#xff1a;创建Task模型及其关联表单 第三步&#xff1a;编写路由URLConf及视图 第四步&#xff1a;编写模板 第五步&#xff1a;运行项目&#xff0c;查看效果 GitHub源码地址 小结 本例中…

2.装饰器模式

概述 装饰器模式&#xff1a;在原有结构&#xff0c;动态地为对象添加职责&#xff0c;它是一种灵活的扩展功能方式。 业务场景&#xff1a;创建订单 假设你正在开发一个电商系统&#xff0c;用户在创建订单时可以选择不同的服务&#xff08;如折扣、配送、礼品包装等&#…

Docker基础之运行原理

docker run的一个执行流程 Docker是一个Client-Server 的结构的系统&#xff0c;Docker的守护进程在主机上&#xff0c;通过Socker从客户端来访问 DockerServer接收到Docker-Client的指令&#xff0c;就会执行这个命令 Docker为什么比Linux快&#xff1f; 1.Docker有着比虚拟机…

LeetCode 2269.找到一个数字的 K 美丽值:字符串数字转换(模拟)

【LetMeFly】2269.找到一个数字的 K 美丽值&#xff1a;字符串数字转换(模拟) 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-k-beauty-of-a-number/ 一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目&#xff1a; 子字符串长度为 k 。…

有哪些好用的AI视频加工创作网站

以下是当前较为流行且功能强大的AI视频创作与加工平台&#xff0c;涵盖视频生成、编辑、特效及自动化处理等功能&#xff0c;适合不同需求的用户&#xff1a; 一、AI视频生成工具 1. Synthesia - 特点&#xff1a;AI虚拟人像生成&#xff0c;支持100语言配音&#xff0c;无…

node.js内置模块之---crypto 模块

crypto 模块的作用 在 Node.js 中&#xff0c;crypto 模块提供了多种加密功能&#xff0c;包括哈希、对称加密、非对称加密和数字签名等。通过 crypto 模块&#xff0c;可以进行各种加密和解密操作&#xff0c;保护敏感数据的安全性。 crypto 模块 1. 哈希算法&#xff08;H…