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

vue3 + ts 输入框对特殊字符进行颜色标识


在后台管理系统中用户输入内容需要对特殊字符进行颜色标识,这里使用到的是elementPlus,因为输入框是字符串无法做颜色标识,只能使用标签形式来做颜色标识。使用定位将渲染元素和输入框重合在一起,输入框背景透明、颜色透明,循环输入元素对每个元素进行判断,是否需要颜色标记,有的话插入一个带class标签span来处理

<template><divclass="keywordInputContainer"><!--和输入层完全重叠,负责渲染标色文字--><divclass="highlightDev"v-html="highlightedText"></div><!--透明,仅负责编辑--><el-inputclass="highlightInput"v-model="inputData"type="textarea"resize="none"@input="handleInput"/></div></template><script lang="ts"setup>constinputData=ref('')consthighlightedText=ref('')consthighlightBracketContent=(inputText:string)=>{if(!inputText)return''letresult=''constinputTextNew=JSON.parse(JSON.stringify(inputText))// 遍历每个字符处理for(leti=0;i<inputTextNew.length;i++){constchar=inputTextNew[i]// 获取字符ASCII编码(十进制)constasciiCode=char.charCodeAt(0)letcharHtml=''// 1. 控制字符(0-31、127)if((asciiCode>=0&&asciiCode<=31)||asciiCode===127){charHtml=`<span class="highlight-text">${char}</span>`}// 2. 显示字符(32-126)elseif(asciiCode>=32&&asciiCode<=126){charHtml=`<span class="highlight-text">${char}</span>`}else{charHtml=char}result+=charHtml;}returnresult;}// 实时输入触发标色consthandleInput=()=>{highlightedText.value=highlightBracketContent(inputData.value);}watch(inputData,handleInput,{immediate:true});</script><style scoped lang="scss">:deep(.highlight-text){background:#fbde28!important;margin:0!important;padding:0!important;border:none!important;// background: none !important;font-weight:inherit!important;font-size:inherit!important;line-height:inherit!important;font-family:inherit!important;vertical-align:baseline!important;}.keywordInputContainer{width:100%;height:100%;position:relative;.highlightDev{position:absolute;top:0;left:0;height:100%;width:100%;padding:8px11px!important;box-sizing:border-box;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif!important;font-size:14px!important;line-height:1.5!important;word-break:break-all;white-space:pre-wrap;overflow-y:auto;pointer-events:none;z-index:1;}// 输入层:透明,仅保留编辑功能:deep(.highlightInput){position:relative;width:100%;height:100%;box-sizing:border-box;z-index:999;.el-textarea__inner{background-color:transparent!important;color:transparent!important;-webkit-text-fill-color:transparent!important;caret-color:#333!important;padding:8px11px!important;font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif!important;font-size:14px!important;line-height:1.5!important;word-break:break-all;white-space:pre-wrap;border:1px solid #dcdfe6!important;resize:none!important;&:focus{caret-color:#409eff!important;border-color:#409eff!important;}}}}</style>
http://www.cnnetsun.cn/news/109350.html

相关文章:

  • 7步成为KolodaView核心贡献者:从开源新手到项目专家的完整指南
  • 【Cirq量子编程效率提升】:揭秘代码补全函数提示背后的黑科技
  • 【高效量子编程】:掌握这4种VSCode批量提交方法,效率提升300%
  • Qwen3-Omni全模态模型实战指南:从零开始构建智能多模态应用
  • 【专家级指南】MCP PL-600 UI组件集成实战:打通多模态交互最后一公里
  • 【量子开发必看】:为什么你的Q#-Python接口总是调试失败?
  • 5步掌握Qwen3-Omni全模态模型:从环境搭建到多模态应用实战
  • 【量子计算开发者必看】:Q#与Python版本匹配的5个关键检查点
  • 如何让Docker Offload延迟降低90%?:一线大厂都在用的5种卸载技术对比
  • NanoPi R5S性能评估:从硬件配置到实际应用的全方位解析
  • 揭秘Docker Compose Agent服务异常:3步实现精准健康报告分析
  • 直播间数据监控实战指南:从入门到精通的高效方案
  • 高效PowerShell转EXE工具使用指南:轻松生成专业可执行文件
  • 必剪官网下载安装图文版教程(附安装包,超级详细)
  • Hyper终端性能优化实践指南
  • 掌握MCP PL-600多模态Agent的UI组件,这4个性能陷阱一定要避开
  • Cirq代码提示太弱?教你亲手打造智能补全系统,提升编码速度70%
  • 情感语音合成的未来趋势:从EmotiVoice看行业发展方向
  • BasePopup:打造优雅高效的Android弹窗解决方案
  • 【稀缺资源曝光】MCP量子编程认证内部培训资料首次全公开
  • 远程开发效率翻倍,VSCode文件同步配置你真的掌握了吗?
  • 后端成本砍掉 90% 后,我发现 Render 和 Railway 都做错了一件事
  • SynthDoG技术解析:如何解决文档理解模型的数据瓶颈问题
  • Open Library 深度探索:构建你的专属数字图书馆王国
  • MapGIS DataStore产品安装要求
  • Go语言Office文档自动化:unioffice完整使用指南
  • 5大策略实现轻量级技术部署:嵌入式设备实战指南
  • MinIO版本选型终极指南:开源与商业版深度对比
  • LinearDesign快速上手:mRNA序列优化实战指南
  • FastExcel终极指南:轻松处理百万级Excel数据的完整教程