vue3 处理文字 根据文字单独添加class
下面写的是根据后端返回的html 提取我需要的标签和字 将他们单独添加样式
后端返回的数据 大概类似于'<h1>2024年“双11”购物节网络零售监测报告</h1><p>表1 “双11” 期间网络零售热销品类TOP10</p>'
function checkfun(newList){if (newList) {let processedAnswer = newList// 这个是判断如果是h2标签里面只有前言这两字的时候就添加class.replace( /<h2>(前言)<\/h2>/gs, '<h2><span class="titleclass">$1</span></h2>'// 这个是判断如果是h2标签里面只有报告说明这两字的时候就添加class).replace(/<h2>(报告说明)<\/h2>/gs,'<h2><span class="titleclass">$1</span></h2>'// 这个是判断如果是如果包含表1,图1等的时候就添加class).replace(/((?:表|图)\d+.*?)(?=(?:<p>|<\/p>|<h2>|<h3>|<li>|<\/li>|$))/gs,'<span class="picture">$1</span>')// 这个是判断如果是如果注的时候就添加class.replace(/((?:注)\d+.*?)(?=(?:<p>|<\/p>|<h2>|<h3>|<li>|<\/li>|$))/gs,'<span class="pour">$1</span>')// 添加表格处理逻辑 --- 这个是我根据标准的table格式进行添加classconst doc = parseHTML(processedAnswer);const tables = doc.querySelectorAll('table');tables.forEach((table) => {// 判断是否是table是否只有一个表头const thead = table.querySelector('thead');const theadLength = thead?.rows[0]?.cells.length || 0;if (theadLength === 1) {table.classList.add('single-header');}// 判断表身里面的数据 是否是数字const tbody = table.querySelector('tbody');tbody?.querySelectorAll('td').forEach((td) => {if (isStringNumber(td.textContent)) {td.classList.add('single-cell');}});// 检查表头是否包含“排名”字段 -- 并且排名这个字段必须在第一位const headers = table.querySelectorAll('thead th:first-child'); const rankIndex = Array.from(headers).findIndex(header => header.textContent.trim() == '排名'); // 如果找到排名列,为所有对应单元格添加样式if (rankIndex !== -1) {// 获取所有行数据const rows = table.querySelectorAll('tbody tr');rows.forEach(row => {const cells = row.querySelectorAll('td');if (cells.length > rankIndex) {cells[rankIndex].classList.add('rank-column');}});}});// 获取到所有的p标签和li标签 判断里面是否有数字和英文 如果有的话将他们单独添加classconst pElements = doc.querySelectorAll('p, li');pElements.forEach(p => {const tempDiv = document.createElement('div');tempDiv.innerHTML = p.innerHTML;const walker = document.createTreeWalker(tempDiv, NodeFilter.SHOW_TEXT);let node;while ((node = walker.nextNode())) {const parent = node.parentNode;const text = node.textContent;let lastIndex = 0;// 改进后的正则表达式const numberRegex = /(-?\d+(?:\.\d+)?|[a-zA-Z']+)/g;let numberMatch;while ((numberMatch = numberRegex.exec(text)) !== null) {const span = document.createElement('span');span.className = 'english-style';span.textContent = numberMatch[0];const textBefore = document.createTextNode(text.slice(lastIndex, numberMatch.index));parent.insertBefore(textBefore, node);parent.insertBefore(span, node);lastIndex = numberRegex.lastIndex;}// 添加剩余文本if (lastIndex < text.length) {const remainingText = document.createTextNode(text.slice(lastIndex));parent.insertBefore(remainingText, node);}parent.removeChild(node);}p.innerHTML = tempDiv.innerHTML;});// 遍历所有p标签进行处理doc.querySelectorAll('p').forEach(p => {if (p.innerHTML.includes(') { // 如果是图片格式的话const span = document.createElement('span');span.innerHTML = p.innerHTML;p.replaceWith(span);}});// 将处理后的DOM转换回HTML字符串processedAnswer = serializeHTML(doc.body);processedList.value = processedAnswer}
}
const isStringNumber = (str) => {// 匹配整数、小数、负数const numberRegex = /^[-+]?(?:\d{1,3}(?:,\d{3})*(?:\.\d+)?|\d+(?:\.\d*)?|\.\d+)$/;return numberRegex.test(str);
};
// 转化为html
function parseHTML(htmlString) {const parser = new DOMParser();return parser.parseFromString(htmlString, 'text/html');
}
// 添加HTML序列化工具函数
function serializeHTML(node) {const temp = document.createElement('div');temp.appendChild(node.cloneNode(true));return temp.innerHTML;
}
px,pt,em换算表 | 菜鸟教程
https://www.runoob.com/w3cnote/px-pt-em-convert-table.html像素与磅换算 -- EndMemo
https://endmemo.com/topography/pixelpointcn.html
相关文章:
vue3 处理文字 根据文字单独添加class
下面写的是根据后端返回的html 提取我需要的标签和字 将他们单独添加样式 后端返回的数据 大概类似于<h1>2024年“双11”购物节网络零售监测报告</h1><p>表1 “双11” 期间网络零售热销品类TOP10</p> function checkfun(newList){if (newList) {let …...
Python爬虫教程011:scrapy爬取当当网数据开启多条管道下载及下载多页数据
文章目录 3.6.4 开启多条管道下载3.6.5 下载多页数据3.6.6 完整项目下载3.6.4 开启多条管道下载 在pipelines.py中新建管道类(用来下载图书封面图片): # 多条管道开启 # 要在settings.py中开启管道 class DangdangDownloadPipeline:def process_item(self, item, spider):…...
Jupyter Notebook不能自动打开默认浏览器怎么办?
在安装anaconda的过程中,部分用户可能会遇到,打开Jupyter Notebook的时候,不会弹出默认浏览器。本章教程给出解决办法。 一、生成一个jupyter默认配置文件 打开cmd,运行以下命令,会生成一个jupyter_notebook配置文件。 jupyter notebook --generate-config二、编辑jupyter_…...
VUE中数据绑定之OptionAPI
<template> <div> 姓名:<input v-model="userName" /> {{ userName }} <br /> 薪水:<input type="number" v-model="salary" /> <br /> <button v-on:click="submit">提交</button>…...
Spring Boot 工程创建详解
2025/4/2 向全栈工程师迈进! 一、SpingBoot工程文件的创建 点击Project Structure 然后按着如下点击 最后选择Spring Boot ,同时记得选择是Maven和jar,而不是war。因为Boot工程内置了Tomcat,所以不需要war。 紧接着选择Spring We…...
Spring Boot + MyBatis + Maven论坛内容管理系统源码
项目描述 xxxForum是一个基于Spring Boot MyBatis Maven开发的一个论坛内容管理系统,主要实现了的功能有: 前台页面展示数据、广告展示内容模块:发帖、评论、帖子分类、分页、回帖统计、访问统计、表单验证用户模块:权限、资料…...
国网B接口协议资源上报流程详解以及上报失败原因(电网B接口)
文章目录 一、B接口协议资源上报接口介绍B.2.1 接口描述B.2.2 接口流程B.2.3 接口参数B.2.3.1 SIP头字段B.2.3.2 SIP响应码B.2.3.3 XML Schema参数定义 B.2.4 消息示例B.2.4.1 上报前端系统的资源B.2.4.2 响应消息 二、B接口资源上报失败常见问题(一)证书…...
布谷一对一直播源码android版环境配置流程及功能明细
一:举例布谷交友(一对一直播源码)搭建部署的基本环境说明 1. 首先安装Center OS 7.9系统,硬盘最低 40G 2. 安装宝塔环境 https://bt.cn(强烈推荐使用) 3. 安装环境 ● PHP 7.3(安装redis扩展…...
TypeScript 类型系统详解
基础类型 TypeScript 支持丰富的基础数据类型,涵盖number、string、boolean、null、undefined、symbol以及bigint。这些类型为构建可靠的代码提供了基石。 数值类型(number):在 TypeScript 里,所有数字均为浮点数…...
SDL多线程编程
文章目录 1. SDL 线程基础2. 线程同步3. 线程池4. 注意事项5. 示例:在多个线程中进行图形渲染和输入处理总结在 SDL(Simple DirectMedia Layer)中,多线程编程通常用于提高应用程序的响应性和性能,尤其是在需要同时处理多个任务的场景中,例如渲染、输入处理和音频等。SDL …...
【Netty4核心原理④】【简单实现 Tomcat 和 RPC框架功能】
文章目录 一、前言二、 基于 Netty 实现 Tomcat1. 基于传统 IO 重构 Tomcat1.1 创建 MyRequest 和 MyReponse 对象1.2 构建一个基础的 Servlet1.3 创建用户业务代码1.4 完成web.properties 配置1.5 创建 Tomcat 启动类 2. 基于 Netty 重构 Tomcat2.1 创建 NettyRequest和 Netty…...
C#语言的饼图
C#语言中的饼图:数据可视化的艺术 在现代软件开发中,数据可视化是一个不可或缺的重要环节。随着数据量的不断增加,仅仅依靠文本和表格来展示数据已显得不够直观。本文将以C#语言为基础,探讨如何使用C#绘制饼图,并进一…...
【AI学习】初步了解TRL
TRL(Transformer Reinforcement Learning) 是由 Hugging Face 开发的一套基于强化学习(Reinforcement Learning, RL)的训练工具,专门用于优化和微调大规模语言模型(如 GPT、LLaMA 等)。它结合了…...
打破界限:Android XML与Jetpack Compose深度互操作指南
在现有XML布局项目中逐步引入Jetpack Compose是现代Android开发的常见需求。本指南将全面介绍混合使用的最佳实践、技术细节和完整解决方案。 一、基础配置 1.1 Gradle配置 android {buildFeatures {compose true}composeOptions {kotlinCompilerExtensionVersion "1.5.3…...
ADASH VA5 Pro中的route功能
这段内容详细介绍了 ADASH VA5 Pro 设备中“Route(路线)”模块的功能、操作流程以及相关特性。以下是对这段内容的总结和分析: Route 模块的主要功能 路线测量:Route 模块用于执行路线测量任务。它允许用户创建和管理一系列测量…...
阿里云oss视频苹果端无法播放问题记录
记录一下苹果端视频不可以播放的原因. 看了一下其他视频可以正常播放,但是今天客户发来的视频无法正常播放.咨询过阿里云售后给出的原因是编码格式过高. 需要调整编码格式为:baseline, 下面记录如何使用ffmpeg修改视频的编码格式. 下载文件(可从官方下载) 配置环境变量(系统变…...
网络安全的现状与防护措施
随着数字化和信息化的迅猛发展,互联网已成为人们日常生活、工作和学习不可或缺的一部分。然而,随着网络技术的普及,网络安全问题也日益突出。近年来,数据泄露、恶意软件、网络攻击等事件层出不穷,给企业和个人带来了巨…...
Ubuntu离线安装mysql
在 Ubuntu 24.04 上离线安装 MySQL 的步骤如下(支持 MySQL 8.0 或 8.4): 一.安装方法 此次安装是按照方法一安装,其它方法供参考: 安装成功截图: 安全配置截图: sudo mysql_secure_installation 登录测试: 方法一:使用 apt-rdepends 下载依赖包(推荐) 1. 在联网…...
移动通信网络中漫游机制深度解析:归属网络与拜访网络的协同逻辑
文章目录 一、漫游基础概念与网络架构1.1 漫游的核心定义1.2 关键网络实体角色 二、漫入漫出详细流程解析2.1 漫出(Outbound Roaming)场景2.2 漫入(Inbound Roaming)场景 三、归属网络与拜访网络的信任演进3.1 各代网络的信任模型…...
IntelliJ IDEA下开发FPGA——FPGA开发体验提升__上
前言 由于Quartus写代码比较费劲,虽然新版已经有了代码补全,但体验上还有所欠缺。于是使用VS Code开发,效果如下所示,代码样式和基本的代码补全已经可以满足开发,其余工作则交由Quartus完成 但VS Code的自带的git功能&…...
PyTorch使用(6)-张量形状操作
文章目录 1. reshape函数1.1. 功能与用法1.2. 特点 2. transpose和permute函数2.1. transpose2.2. permute2.3. 区别 3. view和contiguous函数3.1. view3.2. contiguous3.3. 特点 4. squeeze和unsqueeze函数4.1. squeeze4.2. unsqueeze 5. 应用场景6. 形状操作综合比较7. 最佳实…...
SpringBoot底层-数据源自动配置类
SpringBoot默认使用Hikari连接池,当我们想要切换成Druid连接池,底层原理是怎样呢 SpringBoot默认连接池——Hikari 在spring-boot-autoconfiguration包内有一个DataSourceConfiguraion配置类 abstract class DataSourceConfiguration {Configuration(p…...
数字内容个性化推荐引擎构建
实时数据驱动推荐优化 现代数字内容体验的核心竞争力在于系统对用户需求的即时捕捉与响应。通过实时数据流处理技术,推荐引擎能够同步采集用户点击、停留时长、交互轨迹等多维度行为数据,并借助分布式计算框架在毫秒级完成特征提取与模式识别。例如&…...
【工具】Redis管理工具推荐
【运维】Redis管理工具推荐 Another Redis Desktop Manager 🚀🚀🚀 更快、更好、更稳定的Redis桌面(GUI)管理客户端,兼容Windows、Mac、Linux,性能出众,轻松加载海量键值 AnotherRedisDesktopManager 发行版…...
【高校主办】2025年第四届信息与通信工程国际会议(JCICE 2025)
重要信息 会议网址:www.jcice.org 会议时间:2025年7月25-27日 召开地点:哈尔滨 截稿时间:2025年6月15日 录用通知:投稿后2周内 收录检索:EI,Scopus 会议简介 JCICE 2022、JCICE 2023、JCICE 2…...
【区块链安全 | 第三十一篇】合约(五)
文章目录 合约库库中的函数签名和选择器库的调用保护合约 库 库与合约类似,但它们的目的是仅在特定地址上部署一次,并通过 EVM 的 DELEGATECALL(在 Homestead 之前是 CALLCODE)功能重复使用其代码。这意味着如果调用库函数,它们的代码将在调用合约的上下文中执行,即 th…...
系统与网络安全------Windows系统安全(8)
资料整理于网络资料、书本资料、AI,仅供个人学习参考。 DNS DNS概述 为什么需要DNS系统 www.baidu.com与119.75.217.56,哪个更好记? 互联网中的114查号台/导航员 DNS(Domian Name System,域名系统)的功…...
代理模式的优缺点是什么?
什么是代理模式? 代理模式(Proxy Pattern)是一种结构型设计模式,它通过创建代理对象来控制对原始对象的访问。 这种模式在前端开发中广泛应用,特别是在需要控制对象访问、添加额外逻辑或优化性能的场景中。 核心…...
基于LangChain和通义(Tongyi)实现NL2SQL的智能检索(无需训练)
在数据驱动的时代,如何高效地从数据库中获取信息成为了一个重要的挑战。自然语言到SQL(NL2SQL)技术提供了一种便捷的解决方案,使用户能够用自然语言查询数据库,而无需深入了解SQL语法。本文将探讨如何利用LangChain和通义(Tongyi)实现NL2SQL的智能检索,具体步骤如下: …...
Spring Boot 集成 Redis 对哈希数据的详细操作示例,涵盖不同结构类型(基础类型、对象、嵌套结构)的完整代码及注释
以下是 Spring Boot 集成 Redis 对哈希数据的详细操作示例,涵盖不同结构类型(基础类型、对象、嵌套结构)的完整代码及注释: 1. 集成步骤 1.1 添加依赖 在 pom.xml 中添加以下依赖: <dependency><groupId&g…...
