<del>标签默认删除线极细难见,必须用CSS强化样式并添加datetime和cite属性以保障语义与可追溯性。

为什么 _DEL 标签在普通文本里不显示删除线
因为 _DEL 不是 HTML、Markdown 或任何主流渲染引擎的原生语法,它只是某些内部系统(比如部分 Wiki 编辑器、旧版文档协作工具)自定义的标记,浏览器和编辑器默认完全忽略它——既不报错,也不渲染样式。
想让它起作用,必须手动加 CSS 规则或用 JS 转换。常见错误是直接把 _DEL{xxx} 往 HTML 里一贴,结果文字原样显示,连花括号都露在外面。
- 确保输入格式统一:推荐用
_DEL{已删除内容},避免空格、换行或嵌套破坏解析 - 如果后端返回的是纯文本(非 HTML),不能靠 CSS 生效,得先用 JS 替换成
<del>...</del>或带 class 的 span - 注意转义:若原始文本含
{或},需提前处理,否则正则匹配会错位
用正则 + replace() 把 _DEL{...} 转成 <del>
这是最轻量、兼容性最好的方案,适合前端实时渲染或服务端模板预处理。关键点不是“怎么写正则”,而是“怎么防崩”:
- 用非贪婪匹配:
/_DEL\{([^}]+)\}/g,避免跨多个_DEL段落误吞 - 必须全局替换(
g标志),否则只处理第一个 - 对匹配内容做 HTML 实体转义(如
&→&),防止 XSS;可用DOMPurify.sanitize()或简单textContent中转 - 示例代码:
text.replace(/_DEL\{([^}]+)\}/g, (_, content) => `<del>${escapeHtml(content)}</del>`)
CSS 方式:给 _DEL 文本加 class 后统一控制样式
如果无法改 HTML 结构(比如只能加 class 到容器),可以靠属性选择器捕获含 _DEL 的文本节点,但实际不可靠——CSS 无法基于文本内容选中元素。更可行的是约定 class 命名:
- 把
_DEL{xxx}替换为<span class="del-inline">xxx</span>,再配 CSS:.del-inline { text-decoration: line-through; color: #666; } - 不要用
[data-del]这类属性驱动,因为原始文本没属性可读,还得 JS 注入,不如直接上<del> - 若要支持响应式删除线粗细/颜色,优先用
border-bottom替代text-decoration,后者在字体变小时容易断开
后端渲染时就转换,比前端 JS 更稳
用户看到的页面越早完成标记转换,越不容易出现闪动或未样式化文本。Node.js / Python 模板里做一次字符串替换,比等 JS 加载完再跑 replace() 更可靠:
- Python 示例(Jinja2):
{{ content | regex_replace('_DEL\{([^}]+)\}', r'<del>\1</del>') }} - Node.js(EJS):
<%= content.replace(/_DEL\{([^}]+)\}/g, (_, c) => `<del>${c}</del>`) %> - 注意:服务端替换必须同步完成,不能依赖客户端 JS 补救,否则 SEO 和首屏内容会漏掉删除效果
真正麻烦的不是怎么画那条线,而是确认数据流里哪一层负责解析——上游输入是否可信、中间是否有多次转义、下游是否二次渲染。漏掉任意一环,_DEL 就只是四个字母。

















