当前位置: 首页
前端开发
html中mark用法_html如何高亮显示文档中的搜索词

html中mark用法_html如何高亮显示文档中的搜索词

热心网友 时间:2026-04-28
转载

HTML5 标签:不止是高亮,更是语义化与安全

html中mark用法_html如何高亮显示文档中的搜索词

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

标签包裹关键词即可高亮

想在网页里高亮显示一段文本,比如搜索关键词?其实浏览器早就内置了这个功能。秘诀就在于 HTML5 的原生语义化标签 。它可不是一个简单的样式标签,浏览器会默认将它渲染成醒目的黄色背景,效果就像用荧光笔划过一样。

关键在于,它传达了一种语义:“这段内容在当前的上下文中,具有特别的突出性或相关性。”这使它成为标记搜索结果、引用重点或者匹配用户输入的绝佳选择,既清晰又符合标准。

用法直接得不能再直接:

搜索结果:找到了 Ja vaScript 的相关文档。

这样一来,“Ja vaScript”这个词就会在页面上被自动高亮出来。

不过得留心一个常见的误解: 不是用来做纯样式美化的通用工具。它强调的是“暂态”的相关性,比如一次搜索的命中结果、文档中的编辑建议,或者临时的学习笔记标注。如果要表达永久性的重要内容,比如文章的核心论点,那应该交给 这类标签。

动态插入 时必须转义 HTML 特殊字符

事情在动态场景下会变得棘手。当高亮的内容来自用户输入——比如搜索框里的关键词、URL 里的查询参数——如果直接把它拼接进 HTML 字符串,无异于打开了潘多拉魔盒。

想象一下,用户搜索了 。如果不经处理就直接套上 标签,这段代码就会被浏览器当作可执行的脚本,跨站脚本攻击(XSS)就这么发生了。

立即学习“前端免费学习笔记(深入)”;

所以,安全防线必须筑牢。正确的做法是,先对原始文本进行 HTML 实体转义,然后再包裹高亮标签。

  • 在 Ja vaScript 中,一个稳妥的方法是使用 textContent 属性来创建文本节点,它能自动处理转义,之后再替换到 DOM 中。
  • 要尽量避免使用 innerHTML += '' + keyword + '' 这种危险的字符串拼接。
  • 如果必须使用正则表达式进行全局替换(例如 str.replace(/keyword/g, '$&')),务必先对 keyword 本身进行转义,转义函数类似 keyword.replace(/[&"'`=/]/g, c => `${c.charCodeAt(0)};`)

的样式可以完全自定义,但别忽略可访问性

默认的亮黄色虽然醒目,但并非放之四海而皆准。在深色模式的主题下,或者在色弱、色盲用户眼中,这种对比度可能完全不够,甚至难以辨认。

因此,自定义样式几乎是必然的选择。但在动手时,有几点原则需要记住:

  • 对比度是底线:文字颜色与背景色的亮度对比度至少要达到 4.5:1,确保任何人都能看清。
  • 增强识别度:除了调整颜色,可以增加一点内边距(padding),或者辅以细微的边框、阴影,让高亮区域更明确。
    mark {
      background: #ffeb3b;
      color: #212121;
      padding: 0 2px;
    }
  • 顾及辅助技术:屏幕阅读器通常不会对 有特殊播报。如果确有必要进行语音提示,可以谨慎添加 aria-label 属性,但要避免造成冗余信息干扰。
  • 别让语义消失:切忌写成 mark { background: transparent; text-decoration: underline; } 这种纯装饰样式。如果只是为了下划线而没有任何背景色变化,那就完全丧失了 的语义,这时直接用 标签配合样式才是正确的选择。

服务端渲染或静态页面中批量高亮要小心正则边界

在后端或构建时进行批量文本替换,是另一种常见的高亮场景。这里最大的坑,往往出在正则表达式的“单词边界”处理上。

一个经典的错误是:想要高亮 “cat”,却误伤了 “education”。

错误写法text.replace(/cat/g, 'cat')
结果:“education” 变成了 “educacation”,令人哭笑不得。

正确的做法需要分步走

  • 锚定边界:对于英文单词,使用 \b 来确保匹配的是完整的单词。例如:/\bcat\b/gii 标志用于忽略大小写)。
  • 转义元字符:如果关键词本身包含正则表达式的特殊元字符(比如 +.?),必须先进行转义:keyword.replace(/[.*+?^${}()|[\]\]/g, '\\$&')
  • 中文处理:中文没有明确的单词边界,所以不需要 \b。但要注意全角/半角字符、空格和标点符号可能造成的干扰。通常可以采用更精确的匹配模式,例如利用正向/负向预查来界定词的边界。

说到底,实现高亮功能本身并不复杂。真正的挑战在于,如何在海量、多变且可能不可信的输入来源下,在编码环境、视觉呈现和辅助功能之间,始终保持安全、精确和可用。转义和边界处理,这两道关卡只要有一道失守,轻则导致页面显示混乱,重则可能引发安全漏洞。这其中的分寸,正是前端工程师专业性的体现。

来源:https://www.php.cn/faq/2303874.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
禁止HTML页面滚动的操作方法

禁止HTML页面滚动的操作方法

在前端开发中,禁止HTML页面滚动通常涉及到对CSS样式或Ja vaScript的使用。以下是一些常见的方法: 1 使用CSS的overflow属性 最直接的思路,是通过设置HTML或body元素的 overflow 属性为 hidden 来禁止滚动。这么一来,任何超出视口的内容都会被隐藏,滚动的

时间:2026-04-28 17:41
uni-app怎么做类似于淘宝的物流时间轴 uni-app步骤条组件定制实现【实战】

uni-app怎么做类似于淘宝的物流时间轴 uni-app步骤条组件定制实现【实战】

uni-app 里用 u-steps 实现物流时间轴,为什么总对不上实际节点? 问题根源很明确:你把一个设计用于「线性流程」的步骤条,硬生生套在了「异步事件流」的物流场景上。这就像试图用整齐划一的阅兵方阵,去展示一场状况百出的越野赛跑。 淘宝的物流时间轴,本质上是一系列独立事件的集合。每个节点都有自

时间:2026-04-28 17:41
如何用 JavaScript 实现用户输入五个姓名并按顺序显示在网页上

如何用 JavaScript 实现用户输入五个姓名并按顺序显示在网页上

如何用 prompt() 收集五个姓名并动态渲染到页面?一份实战指南 在前端入门的实践环节里,有一个“经典关卡”:如何从用户那里收集一组数据,存起来,再漂亮地展示出来?听起来基础,但很多新手在第一关就卡住了——变量作用域混乱、DOM元素找不到、代码逻辑“断层”,这些都是常见问题。 今天,我们就以“收

时间:2026-04-28 17:41
关于html选择框创建占位符的问题

关于html选择框创建占位符的问题

为HTML选择框(Select)添加“占位符”的几种思路 在表单设计中,为文本输入框设置一个灰色的提示占位符(placeholder)早已是标准操作,用户体验非常好。但轮到下拉选择框(Select)时,不少开发者会发现事情没那么简单——HTML原生并没有提供类似的placeholder属性。 最直观

时间:2026-04-28 17:40
uni-app怎么隐藏导航栏 uni-app自定义顶部导航栏配置【详解】

uni-app怎么隐藏导航栏 uni-app自定义顶部导航栏配置【详解】

uni-app导航栏隐藏的真相:一份跨端开发的避坑指南 先直接说结论,这也是很多人试错过后的经验:na vigationBarHidden: true 确实是写法最简单、跨端最稳妥的隐藏方式,但它的生效范围仅限于小程序和H5。想在APP端真正移除原生导航栏?那必须祭出组合拳:na vigationS

时间:2026-04-28 17:40
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 日榜
  • 周榜
  • 月榜
热门教程
更多
  • 游戏攻略
  • 安卓教程
  • 苹果教程
  • 电脑教程