将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
data-属性仅用于存储数据,不直接控制显示隐藏;需通过js读取后操作style.display、hidden或class来实现,核心价值在于解耦行为与配置。

data- 属性本身不控制显示或隐藏,它只是“存数据”的容器。真正起作用的是你用 JS 读取这些值后,去操作 style.display、hidden 或 class。
data- 属性怎么配合显示/隐藏逻辑使用
- 它的核心价值是把“该显示谁”“该隐藏谁”的决策规则从 JS 代码里抽出来,写进 HTML 结构中,让行为和配置解耦
- 常见模式:给目标元素打上
data-target、data-value、data-column等标记,再用 JS 查询匹配并批量操作 - 不要指望写个
data-hidden="true"就能自动隐藏——浏览器完全忽略这种写法,必须由 JS 主动读取并执行动作
例如,根据单选按钮的 value 显示对应内容区:
<input type="radio" name="section" value="profile" data-target="section-profile"><input type="radio" name="section" value="settings" data-target="section-settings"><p></p><div id="section-profile" class="panel" style="display:none;">...</div> <div id="section-settings" class="panel" style="display:none;">...</div>JS 中:
document.querySelectorAll('input[name="section"]').forEach(radio => {
radio.addEventListener('change', () => {
const targetId = radio.dataset.target;
document.querySelectorAll('.panel').forEach(p => p.style.display = 'none');
document.getElementById(targetId).style.display = 'block';
});
});
为什么不用 data-hidden 直接驱动样式
- 浏览器不会解析
data-hidden为样式指令,它只是字符串属性 - 如果你写
<div data-hidden="true">,这个 div 依然正常渲染,除非你额外写 CSS 规则(比如 <code>[data-hidden="true"] { display: none; }) - 这种 CSS 方式看似省事,但有严重隐患:
-
data-hidden是字符串,"true"和"1"或空字符串都可能被误判 - 无法响应运行时变化:JS 改了
dataset.hidden = "false",CSS 不会自动重新计算 - 与
hidden布尔属性冲突,容易混淆语义
-
- 属性名自动转驼峰:HTML 中写
data-user-id="123",JS 里得用el.dataset.userId,不是el.dataset.user-id(语法错误) - 所有值都是字符串:即使写
data-value="0",el.dataset.value === "0",不是数字0,比较前记得Number()或parseInt() - 空值不等于 false:
data-active=""读出来是空字符串"",不是false或undefined,需显式判断 - 多单词命名必须用短横线分隔:
data-column-name→dataset.columnName;data-columnname会被忽略
更稳妥的做法是:用 data- 存逻辑标识,用 JS 控制 elem.hidden = true 或 elem.classList.toggle("is-hidden")。
dataset 读取时的典型坑点
关键不在 data- 本身有多“智能”,而在于你怎么用它把控制逻辑从硬编码移到声明式配置里。最容易出问题的地方,是把 dataset 当成布尔开关直接塞进 if 判断,却忘了它永远返回字符串。










