利用JavaScript在HTML页面搜索并高亮匹配的文本

网页中内容比较多的话,有时候需要通过搜索快速查找特定的文本。当然,这可以通过浏览器的搜索功能实现,但是,象Anki的复习界面这样的场景,并没有搜索功能,我们就需要自己在网页上提供一个搜索框来实现。

下面先用原生JavaScript实现一个。基本思路是,用户在input中输入文字后,在页面上进行查找,找到匹配的内容,就用一个class属性为包含高亮格式的css类名的span标签包裹起来。代码如下:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="utf-8"><title>原生js搜索并高亮文本</title><style>/* 用于高亮显示的css类 */.highlight {background-color: yellow;font-weight: bold;}</style>
</head>
<body>
<div style="width:30%;text-indent: 2em;color:red;">这个搜索用的是在innerHTML中搜索文本,因此,如果文本中包含html标签会导致搜索失败。在innerText中搜索文本,可以排除html标签的影响,但高亮后可能破坏原有的文档标签结构。</div><pre>下面的代码显示两行文本,参见灰色底纹处:&lt;div class="content"&gt;&lt;p&gt;我爱北京&lt;span&gt;天安&lt;i&gt;门&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;天安门上太阳升&lt;/div&gt;</pre><div class="content" style="background-color: #ccc;width:20%;"><p>我爱北京<span>天安<i>门</i></span></p>天安门上太阳升</div><input type="text" id="searchInput" placeholder="输入搜索文本..." oninput="highlightText()"/><script>function highlightText() {const searchInput = document.getElementById('searchInput');const searchValue = searchInput.value.trim();const contentElement = document.querySelector('.content');const content = contentElement.innerHTML;if (searchValue !== '') {//先清除原有的高亮,即将用于高亮的<span>标签删除但保留原有内容let highlightedContent = content.replace(new RegExp('<span class="highlight">(.*)</span>', 'gi'),'$1');//高亮,即将需要高亮的内容用类名为包含高亮格式的css类span标签包裹起来highlightedContent = highlightedContent.replace(new RegExp(searchValue, 'gi'),'<span class="highlight">$&</span>');contentElement.innerHTML = highlightedContent;} else {//清除高亮let highlightedContent = content.replace(new RegExp('<span class="highlight">(.*)</span>', 'gi'),'$1');}}</script>
</body>
</html>

上面的代码显示的网页大致如下:

在搜索框输入文字,例如“天安”,两处天安均会高亮显示,如下:

再多输入一个“门”,这时候上面的天安门不高亮显示了,只有下面的天安门高亮显示:

这就是网页上部文字说明的意思。上一行的天安与门字中间多了个html标签<i>,导致匹配失败。所以要用原生JavaScript来实现高亮,还要想法消除可能存在的HTML标签的影响。这里涉及到的算法还是比较复杂的。好在jquery有个mark.js库,用来干这个事那就是小儿科了。以上面的页面为例,只需要将input元素的oniput事件删除,将原有的原生JavaScript代码删除,引入jquery和mark库(我这里是下载到本地了,也可以用CDN方式引用),然后增加数行代码即可完成。参见如下代码:

   <input type="text" id="searchInput" placeholder="输入搜索文本..."/><script src="jquery.min.js" ></script><script src="jquery.mark.es6.js"></script><script>$(function() {$("#searchInput").on("input.highlight", function() {// 获取指定搜索的字符串var searchTerm = $(this).val();// 将解析中匹配的文本高亮$(".content").unmark().mark(searchTerm,{"acrossElements": true,"separateWordSearch": false,"className":"highlight",});}).trigger("input.highlight");});</script>

用这个库,html标签就不影响文本的匹配了,参见下图:

将这个功能应用到Anki中,要能够离线使用,需要将上面两个JavaScript库下载下来,复制到“%APPDATA%/anki2”中的Anki登录用户名下的“collection.media”文件夹中,为防止被Anki当作未使用资源删除,应该将JavaScript库文件名修改为以英文状态的下划线开头。然后将最后那个代码片段复制到Anki卡片模板中的适当位置(注意JavaScript库的名称前加上下划线),修改一下相关的jquery选择符及相关类名就行了。

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

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

相关文章

金蝶API取数+JSON解析,FDL助力高效数据处理

目录 一、企业介绍 二、业务难题与挑战 商管预算管理瓶颈凸显&#xff1a;金蝶数据手工导出&#xff0c;跨库关联分析时效受限 金蝶API数据提取&#xff1a;挑战重重的技术攻坚战 三、解决方案 商管预算管理升级&#xff1a;API取数JSON解析&#xff0c;FineDataLink助力高效数…

18.按键消抖模块设计(使用状态机,独热码编码)

&#xff08;1&#xff09;设计意义&#xff1a;按键消抖主要针对的时机械弹性开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性作用&#xff0c;一个按键开关在闭合时不会马上稳定地接通&#xff0c;在断开时也不会一下子就断开。因而在闭合以及断开的瞬…

PHP微票务微信小程序系统源码

&#x1f39f;️【一键购票&#xff0c;便捷生活新体验】微票务系统小程序全解析 &#x1f4f1;【随时随地&#xff0c;票务尽在掌握】 告别排队购票的烦恼&#xff0c;微票务系统小程序让你随时随地轻松购票&#xff01;无论是热门演唱会的门票、热门景点的入园券&#xff0…

实时追踪与分析用户反馈:淘宝/天猫商品评论API的应用实践

实时追踪与分析用户反馈是电商平台提升用户体验、优化产品策略的重要手段。淘宝/天猫作为国内领先的电商平台&#xff0c;其商品评论API接口为商家提供了强大的数据支持&#xff0c;帮助商家实时追踪用户反馈并进行深入分析。以下是淘宝/天猫商品评论API在实时追踪与分析用户反…

推荐一款Win11主题WPF UI框架

最近在微软商店&#xff0c;官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的Fluent Design UI设计&#xff0c;为用户带来全新的视觉体验。 WPF Gallery简介 做为一关注前沿资讯的开发人员&#xff0c;首先关注的是应用WPF Gallery…

HTML(27)——渐变

渐变是多个颜色逐渐变化的效果&#xff0c;一般用于设置盒子模型 线性渐变 属性&#xff1a;background-image : linear-gradient( 渐变方向 颜色1 终点位置, 颜色2 终点位置, ......&#xff09;&#xff1b; 取值: 渐变方向:可选 to 方位名词角度度数 终点位置:可选 百分…

Java语言+后端+前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码

Java语言后端前端Vue,ElementUI 数字化产科管理平台 产科电子病历系统源码 Java开发的数字化产科管理系统&#xff0c;已在多家医院实施&#xff0c;支持直接部署。系统涵盖孕产全程&#xff0c;包括门诊、住院、统计和移动服务&#xff0c;整合高危管理、智能提醒、档案追踪等…

idea运行旧的项目如何引入jar包

背景: 有一个旧项目,年份不详, 生产环境运行正常, 生产环境jenkins打包正常;部分jar包为私包,已无法下载 现在要对这个项目进行调试修改 从生产环境下载正常的jar包解压找到lib把lib放到项目目录中 然后选者对应的jdk版本: 一个模块一个模块的 把刚才的库加进去 然后试着启…

Unity海面效果——5、水沫和海平线

Unity引擎制作海面效果 大家好&#xff0c;我是阿赵。 继续做海面效果&#xff0c;上次做完了漫反射颜色和水波动画&#xff0c;还有法线和高光效果。 原则上来说&#xff0c;这个海面已经基本能看了&#xff0c;从性能的考虑&#xff0c;到这里差不多可以停止了。不过有些细节…

文章SameStr(四):图4代码

“Publication Figure 4” 百度云盘链接: https://pan.baidu.com/s/15g7caZp354zIWktpnWzWhQ 提取码: 4sh7 Libraries Standard Import library(tidyverse) library(cowplot) library(scales) library(ggpubr)Special library(caret) library(plotROC) library(tidymodel…

AIGC:为创意产业注入新质生产力

在当今数字化浪潮下&#xff0c;人工智能&#xff08;AI&#xff09;正以惊人的速度重塑着各行各业&#xff0c;特别是在创意产业领域&#xff0c;AI所带来的变革显得尤为深刻且广泛。 我深切感受到AIGC&#xff08;Artificial Intelligence Generated Content&#xff0c;即人…

gen_cross_contour_xld 为每个输入点生成一个十字形状的XLD轮廓。

gen_cross_contour_xld Name 名称 gen_cross_contour_xld — Generate one XLD contour in the shape of a cross for each input point. 为每个输入点生成一个十字形状的XLD轮廓。 Signature 签名 gen_cross_contour_xld( : Cross : Row, Col, Size, Angle : ) Descripti…

uniapp开发android调试工具

程序运行在真机后&#xff0c;点击Hbuilder菜单栏中的视图&#xff0c;点击下方的显示Webview调试控制台 下方就会展示你在手机端操作的界面 点击需要在电脑端调试的界面&#xff0c;界面会在新开的浏览器中展示&#xff0c;这样一些h5浏览器无法点击出来的样式就可以这样调试了…

【Java】搜索引擎设计:信息搜索怎么避免大海捞针?

一、内容分析 我们准备开发一个针对全网内容的搜索引擎&#xff0c;产品名称为“Bingoo”。 Bingoo的主要技术挑战包括&#xff1a; 针对爬虫获取的海量数据&#xff0c;如何高效地进行数据管理&#xff1b;当用户输入搜索词的时候&#xff0c;如何快速查找包含搜索词的网页…

零基础STM32单片机编程入门(十一) OLED显示屏实战含源码视频

文章目录 一.概要二.0.96寸OLED屏介绍1.OLED屏外观图2.OLED屏特点3.OLED屏接口定义4.OLED屏原理图5.OLED屏像素分辨率 三.字库取模软件PCtoLCD2002介绍四.STM32单片机驱动OLED显示实验五.CubeMX工程源代码下载六.讲解视频链接地址七.小结 一.概要 OLED被称为有机激光二极管显示…

DBeaver安装教程(开发人员和数据库管理员通用数据库管理工具)

前言 DBeaver 是一个通用的数据库管理工具和 SQL 客户端&#xff0c;支持 MySQL, PostgreSQL, Oracle, DB2, MSSQL, Sybase, Mimer, HSQLDB, Derby, 以及其他兼容 JDBC 的数据库。DBeaver 提供一个图形界面用来查看数据库结构、执行SQL查询和脚本&#xff0c;浏览和导出数据&a…

无损音频格式 FLAC 转 MP3 音频图文教程

音频文件的格式多样&#xff0c;每种格式都有其独特的特点与适用场景。FLAC&#xff08;Free Lossless Audio Codec&#xff09;&#xff0c;作为一种无损音频压缩格式&#xff0c;因其能够完美保留原始音频数据的每一个细节而备受音频发烧友和专业人士的青睐。 然而&#xff0…

NuGet 中国国内镜像

有时候网络不好&#xff0c;需要使用国内的一些镜像源。 华为资源&#xff1a; https://repo.huaweicloud.com/repository/nuget/v3/index.json 腾讯资源&#xff1a; https://mirrors.cloud.tencent.com/nuget/ 微软中国镜像源&#xff1a;https://nuget.cdn.azure.cn/v3…

仪表板展示|DataEase看中国:2023年中国新能源汽车经济运行情况分析

背景介绍 随着政府机构、企业和个人对环保和可持续发展的高度关注&#xff0c;“新能源汽车”在全球范围内成为了一个热门话题。新能源汽车是指使用非传统燃料&#xff08;如电能、氢能等&#xff09;作为动力源的汽车。 在中国市场&#xff0c;新能源汽车产业蓬勃发展&#…

form原生表单以及el-from表单阻止表单默认提交事件,上传文件自动提交刷新以及input输入框按下enter键自动搜索的事件

问题&#xff1a; 1.form原生表单以及el-from表单阻止表单默认提交事件 2.上传文件自动提交刷新 3.只有一个input输入框按下enter键自动搜索提交的事件 解决方案&#xff1a; 1.el-form使用submit.native.prevent 2.form表单使用οnsubmit"return false"