必须用实现错题知识点语义化分组,禁用class模拟;每个section仅对应一个topic,多知识点题需拆分;data-topic是JS筛选、导出、AI分析的唯一可靠依据。

错题HTML结构必须带知识点语义标签
纯靠CSS类名或div嵌套做分组,后期根本没法自动归类——浏览器不认“class="trigonometry"”是三角函数,它只认标准语义。真正能被脚本识别、筛选、导出的分组基础,是用<section></section>配合data-topic属性。
常见错误:把所有错题塞进一个<div id="mistakes">,再靠JS遍历文本关键词匹配“余弦定理”“动能守恒”,结果题目里写“cosθ”没匹配上,“机械能”被误判成“机械振动”。
<ul>
<li>
<code><section data-topic="quadratic-equation"></section> 是唯一可靠锚点,比class更易提取、不易误改
linear-inequality),避免空格、中文、大小写混用导致JS匹配失败<section></section>只对应一个data-topic,多知识点题拆成多个section,别用data-topic="a,b,c"——后续filter会崩用querySelectorAll按知识点批量操作DOM
有了data-topic,归类就变成一行JS的事:document.querySelectorAll('section[data-topic="function-graph"]')直接拿到全部函数图像题,不用遍历、正则、字符串查找。
使用场景:点击“查看所有数列题”,页面滚动到第一个data-topic="sequence",同时高亮所有同组题;导出PDF时只取data-topic="probability"的section。
立即学习“前端免费学习笔记(深入)”;
- 注意引号必须是英文单引号或双引号,
querySelectorAll("section[data-topic=sequence]")会报错(缺引号) - 如果知识点值含特殊字符(如括号、点号),必须加引号:
section[data-topic="logarithm-base-e"] - IE11不支持
data-属性选择器,若需兼容,改用section[topic]并同步在HTML里写topic="xxx"(但语义性下降)
避免用class模拟知识点导致样式与逻辑耦合
有人写<div class="topic-algebra">然后用<code>.topic-algebra { color: #2563eb; },看起来能分组,但问题立刻出现:换主题色要改CSS,加新知识点要同步增class和CSS规则,导出逻辑还得额外解析class字符串——三处维护,一处改错全崩。
性能影响很小,但可维护性断崖下跌。一个data-topic属性,样式由JS动态加class控制,逻辑归逻辑,样式归样式。
- 正确做法:JS获取
section.dataset.topic后,再调element.classList.add('topic-' + topic) - 禁止在CSS里写
[class*="topic-"]去匹配,这属于class滥用,且无法精准区分topic-trig和topic-trigonometry - 移动端点击展开某知识点时,优先用
data-topic查,别用getElementsByClassName——后者返回HTMLCollection,不支持forEach
导出为JSON时data-topic是唯一可信字段
错题本最终要存档、跨设备同步、甚至喂给AI分析,这时候HTML结构里的data-topic就是原始事实。标题文字可能写“二次函数图像”,也可能简写“2次函图”,但data-topic="quadratic-function-graph"始终一致。
容易被忽略的是:导出脚本若依赖innerText或textContent抽关键词,遇到“已知f(x)=ax²+bx+c,求顶点”,根本抽不出“quadratic-function-graph”,而dataset.topic永远存在、可控、无歧义。
- 导出JSON示例:
{"id": "q042", "html": "...", "topic": "quadratic-function-graph", "difficulty": 2} - 别把
data-topic当装饰用,它得和后台知识点树严格对齐,否则后续打标签、统计正确率都会偏移 - 如果题目本身跨多个知识点(如导数+不等式),不要拼接值,而是用多个
<section></section>分别包裹同一道题的不同解析段落
data-topic值一旦定下,就别轻易改。改一个值,所有历史导出、统计脚本、甚至学生书签里的锚点链接全失效。



















