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

两段文本比对,高亮出差异部分

用法一:computed

<div class="card" v-if="showFlag"><div class="info">*红色背景为已删除内容,绿色背景为新增内容</div><el-form-item label="与上季度比对:"><div class="compareCss" v-html="highlightedLastQuarteDiff"></div></el-form-item>
</div>

安装插件:diff

npm install diff
import diff from 'diff';
// 与上季度比对
const highlightedLastQuarteDiff = computed(() => {const oldText = state.jsonContent ?? ''; // 旧值(原内容)const newText = state.content ?? ''; // 新值(修改后内容)const differences = diff.diffChars(oldText, newText); // 字符级差异对比let result = '';differences.forEach(part => {// 被删除的内容(旧值有,新值无)if (part.removed) {result += `<span style="text-decoration: line-through; background:#fbe9eb;color: red;  text-decoration-color: #777;">${part.value}</span>`;}// 新增的内容(旧值无,新值有)else if (part.added) {result += `<span style="background-color: #a6f3a6; color: #777;">${part.value}</span>`;}// 未改动的内容else {result += part.value;}});return result;
});

用法二:封装成方法

<div class="compareTableCss"><div v-for="cItem in compareTable" :key="cItem.line"><p>{{ cItem.title }}</p><p v-html="cItem.content"></p></div>
</div>
function highlightTextDifferences(oldText: string | null | undefined, newText: string | null | undefined): string {// 处理 null/undefined 情况const safeOldText = oldText ?? '';const safeNewText = newText ?? '';try {const differences = diff.diffChars(safeOldText, safeNewText);let result = '';differences.forEach((part:any) => {if (part.removed) {result += `<span style="text-decoration: line-through; background:#fbe9eb;color: red; text-decoration-color: #777;">${escapeHtml(part.value)}</span>`;} else if (part.added) {result += `<span style="background-color: #a6f3a6; color: #777;">${escapeHtml(part.value)}</span>`;} else {result += escapeHtml(part.value);}});return result;} catch (error) {console.error('Error in text comparison:', error);return escapeHtml(safeNewText); // 出错时返回新文本}
}function escapeHtml(text: string): string {const div = document.createElement('div');div.textContent = text;return div.innerHTML;
}// 使用
state.compareTable[1].content = highlightTextDifferences(fItem.windMuBiao, fItem.muBiao);

相关文章:

  • 最新AI-Python机器学习与深度学习技术在植被参数反演中的核心技术应用
  • Redis从入门到上手-全面讲解redis使用.
  • Vue3中index.html与app.vue、main.ts三个文件的作用和关系
  • 北斗导航 | 基于LSTM-KF融合的北斗卫星定位算法研究框架
  • 在方德桌面操作系统V5.0-G23上使用 NetworkManager 配置静态 IP 和动态 IP 的完整指南
  • 含锡废水的处理
  • OSI七层模型和TCP/IP四层模型
  • 时间序列-数据窗口进行多步预测
  • 数模学习:一,层次分析法
  • 第14章 授权:保护应用程序
  • 微信小程序 tabbar底部导航栏
  • Linux的时间函数
  • 基于SpringBoot+Vue的影视系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 基于Vue3 的 h5监听从左到右手滑返回上一页
  • 省时省力的AI批量原创SEO文章生成工具解放双手
  • DevOps:概念与学习路径
  • Python 学习路线与笔记跳转(持续更新笔记链接)
  • arm-linux emmc镜像备份 和 rootfs镜像备份
  • vuex持久化vuex-persistedstate,存储的数据刷新页面后导致数据丢失
  • 从认证到透传:用 Nginx 为 EasySearch 构建一体化认证网关
  • 外交部:美国是国际军控与防扩散体系的最大破坏者
  • 专访|白俄罗斯共产党中央第一书记瑟兰科夫:只有大家联合起来,才能有效应对当前危机所带来的冲击
  • 潘功胜:一季度中国经济开局良好,金融市场展现出较强韧性
  • 李良生已任应急管理部党委委员、政治部主任
  • 观察|动力电池步入“多核时代”,宁德时代新技术密集开箱有何启示
  • 《哪吒2》再次延映至五月底,春节档影片仍有竞争力