
HTML5 里用 标注重点,不是 或
HTML5 明确把 定义为“高亮显示文本中需要引起注意的部分”,语义上专用于标注重点(比如搜索结果中的关键词、文档中被标记的引用段落)。它和 (强调重要性)、(强调语气)有本质区别——浏览器默认给 加黄色背景,且无障碍工具会将其识别为“突出内容”而非“语义强调”。
常见误用是拿 或 替代,这会导致语义丢失、可访问性下降,也不利于后续用脚本统一处理。
用正则批量清除所有 标签(含嵌套与属性)
正则适合一次性清洗 HTML 字符串(如服务端预处理、构建时替换),但要注意:HTML 是不规则语法,正则无法 100% 安全解析嵌套或畸形结构。仅适用于你**完全控制源 HTML 格式**的场景(比如 CMS 导出、静态 Markdown 渲染后的内容)。
推荐正则模式(JavaScript / Node.js 环境):
立即学习“前端免费学习笔记(深入)”;
html.replace(/<\/?mark\b[^]*?>/gi, '')
说明:
匹配或,\b防止匹配到这类词 -
[^]*?非贪婪匹配任意字符(包括换行),覆盖带属性的写法如 -
gi全局 + 不区分大小写,兼容写法(虽不推荐,但实际存在)
⚠️ 注意:若 内部含其他标签(如 abcdefghi),此正则只删标签本身,保留内部 HTML;如需连内容一起删,改用 /[\s\S]*?/gi,但必须确保成对闭合,否则会跨标签误删。
用 DOM 遍历安全清除所有 (保留子节点内容)
这是最稳妥的方式,适用于浏览器环境或服务端使用 JSDOM、Cheerio 等库操作真实 DOM 树。它能正确处理嵌套、属性、文本节点混合结构,且不会破坏文档结构。
核心逻辑:找到所有 元素 → 把它的全部子节点(包括文本、元素)移到父节点中 → 移除该 元素本身。
示例(原生 DOM,支持 IE9+):
document.querySelectorAll('mark').forEach(mark => {
const parent = mark.parentNode;
const fragment = document.createDocumentFragment();
while (mark.firstChild) {
fragment.appendChild(mark.firstChild);
}
parent.replaceChild(fragment, mark);
});
关键点:
- 用
document.createDocumentFragment()批量移动子节点,避免反复重排 -
while (mark.firstChild)比Array.from(mark.childNodes)更安全,防止循环中节点被移走导致索引错乱 - 若需清空内容(即删掉
及其所有内容),直接调用mark.remove()即可
清除后容易被忽略的副作用
被移除后,样式、JS 绑定、焦点状态都会丢失,但有些细节常被忽略:
- CSS 中针对
mark的规则(如mark { background: #ff0; })虽失效,但若同时写了.highlight { background: #ff0; }且原带有 class,则 class 属性还在,样式可能意外保留 - 若页面有监听
mark元素的事件委托(如document.addEventListener('click', e => { if (e.target.tagName === 'MARK') {...} })),清除后这些逻辑自然失效,但不会报错,容易漏测 - SEO 和可访问性方面:移除
后,原本由屏幕阅读器读作“高亮:xxx”的内容,会退化为普通文本,对依赖语义的用户有影响
真正要清理的,从来不只是标签本身。











