_HTML 不是合法 HTML 属性,因 HTML5 标准仅允许全局属性(如 id、class)和 data-* 自定义属性;下划线开头的属性不被解析、无效且无法通过验证,应使用 data-html 等标准方式。

HTML 没有 _HTML 这个属性或标签,所有以 underscore 开头的属性(如 _html、_target)都不是标准 HTML 属性,浏览器不会解析,也不会生效。
为什么 _HTML 不是合法属性
HTML 标准(HTML5)只定义了有限的全局属性(如 id、class、data-*)和元素特有属性(如 href、src)。下划线开头的名称既不是保留关键字,也不在规范中,属于自定义命名——但必须符合 data-* 规则才能被正确识别和使用。
- 直接写 :DOM 中可通过
element.getAttribute('_html')读取,但无法触发任何浏览器行为,且不通过 HTML 验证- 部分旧框架(如早期 PHP 模板或某些 CMS)可能用
_xxx做内部标记,但这属于私有约定,不是 HTML 本身能力- 现代前端框架(React/Vue)中,带下划线的 prop 或 attribute 通常被忽略或视为无效,除非显式透传
data-是唯一安全的自定义属性方案若你需要为元素添加额外元信息(比如供 JS 调用的配置、后端渲染标识),必须使用
data-前缀。这是 HTML5 明确允许且浏览器原生支持的方式。- 合法写法:
内容
- JS 中获取:
element.dataset.html→"true";element.dataset.userId→"123"(自动驼峰转换) - 避免用
data-_html:虽然语法不报错,但语义混乱,且dataset._html在 JS 中无法访问(下划线会被忽略或导致语法错误)
常见误用场景与替代方案
很多人想用
_HTML实现「服务端注入 HTML 片段」或「禁用默认行为」,其实都有标准解法:立即学习“前端免费学习笔记(深入)”;
- 动态插入 HTML:用
innerHTML或insertAdjacentHTML(),而不是靠自定义属性驱动 —— 属性只负责“描述”,不负责“执行” - 标记可编辑区域:用
contenteditable="true",而非_editable - 区分开发/生产环境行为:用
data-env="dev"+ JS 判断,而不是_env - SEO 或结构化数据需求:用
meta、script type="application/ld+json"等标准方式,不要依赖非标属性
普通文本真正要控制 HTML 渲染逻辑的地方,永远在 JS 或服务端模板里,不在 HTML 属性名加不加下划线这件事上。别让命名习惯掩盖了对标准机制的理解偏差。
- 部分旧框架(如早期 PHP 模板或某些 CMS)可能用











