From fbd2e2c017851eb5ef2691e47fe43ef1cef7c45d Mon Sep 17 00:00:00 2001 From: Praveen Bishnoi Date: Tue, 13 Oct 2026 17:20:10 +0530 Subject: [PATCH 1/5] =?UTF-8?q?fix(index):=20=E8=A1=A5=E9=BD=90=20noscript?= =?UTF-8?q?=20=E6=A0=87=E7=AD=BE=E4=B8=AD=E7=BC=BA=E5=A4=B1=E7=9A=84?= =?UTF-8?q?=E7=AC=AC=2027=20=E8=87=B3=2034=20=E8=8A=82=E5=85=A8=E4=B9=A6?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 全书扩充至 34 节 690 条后,index.html 的 noscript 纯文本目录仍停留在第 26 节。补齐第 27 节至第 34 节的重点条目摘要,使无 JS 终端与搜索引擎爬虫可完整获取全书 34 节大纲。 --- index.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/index.html b/index.html index 1cd2bc882..74da40800 100644 --- a/index.html +++ b/index.html @@ -372,6 +372,14 @@

高性价比人生指南

  • 看病:怎么少花钱少走弯路:分级诊疗与转诊、起付线连续计算、报销比例差、预留号源、异地就医、病历留存
  • 人走了以后要办什么:殡葬基础项目清单、价格违法、中介备案、公积金余额与社保待遇、死者个人信息权利
  • 做一个网站或平台:支付结算红线、ICP 许可与备案、直播与视听资质、平台核验与涉税报送、内容治理、实名、未成年人、通知删除、数据出境、服务器选型
  • +
  • 怀孕和生产:叶酸与建册产检、破水处置、无痛分娩、剖宫产指征、生育保险、出生医学证明、新生儿筛查、参保与落户
  • +
  • 别为了外形把身体搞坏:极端节食与进食障碍、医美两证、面部填充失明部位、违法减肥药、正畸当面复诊
  • +
  • 遭遇重大打击之后:丧亲、重病诊断、失业、丧偶、哀伤就医、12356 与 12355、应激期不做不可逆决定
  • +
  • 上学以后的孩子:按小时算的急症、被欺凌处置、每天户外 2 小时、抑郁筛查、治愈近视骗局、散瞳验光、窝沟封闭、别送戒网瘾学校
  • +
  • 十八岁之后有哪几条路:十二条路法定门槛、当兵入伍、特岗教师、军队文职、自考成考、公费师范定向医学生、出国打工、创业担保贷款、骑手保障
  • +
  • 出国留学:身份、打工、保险和回国认证:认证院校、居留与宽限期、打工时数上限、留学预警、OSHC、留服认证
  • +
  • 残疾之后怎么活:精神障碍住院原则、照护者健康、治愈系骗局、办证待遇、康复救助、无障碍改造、残保金、行为能力与监护
  • +
  • 家里的常备药别吃出事:对乙酰氨基酚别吃重复、儿童退烧禁忌、布洛芬胃损伤、2 岁以下不喂复方感冒药、奥美拉唑限期、感冒不用抗生素、头孢酒精禁忌
  • From 0de847323dd9c559334ae7a0c6b61fb7b501b976 Mon Sep 17 00:00:00 2001 From: Praveen Bishnoi Date: Tue, 13 Oct 2026 17:20:33 +0530 Subject: [PATCH 2/5] =?UTF-8?q?fix(index):=20=E4=BF=AE=E5=A4=8D=E8=B7=A8?= =?UTF-8?q?=E6=9D=A1=E7=9B=AE=E8=B7=B3=E8=BD=AC=E6=9C=AA=E5=BD=BB=E5=BA=95?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=20dispute=20=E4=B8=8E=20todo=20=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 gotoItem() 中,当目标卡片因当前筛选被隐藏时,原代码仅清空了关键词 q 与维度筛选 DIMS,遗漏了 state.dispute 与 state.todo。对齐 init() 与 reset() 逻辑,确保跳转至非争议/待核实条目时目标卡片能够正常解除隐藏并精准定位。 --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index 74da40800..55ccd9287 100644 --- a/index.html +++ b/index.html @@ -972,6 +972,7 @@

    高性价比人生指南

    if (!el) return; if (!el.offsetParent){ // 目标被筛选藏起来了,先把筛选清掉再跳 state.q = ''; for (const d of DIMS) state[d].clear(); + state.dispute = false; state.todo = false; syncControls(); apply(); writeUrl(); } // 把「从哪跳的」写进当前这条历史记录,再推一条新的,这样浏览器后退键和鼠标侧键 From 283d8d287a4b632c0a03c439e46389d813a6bcb6 Mon Sep 17 00:00:00 2001 From: Praveen Bishnoi Date: Tue, 13 Oct 2026 17:21:29 +0530 Subject: [PATCH 3/5] =?UTF-8?q?fix(index):=20=E9=81=BF=E5=85=8D=20writeUrl?= =?UTF-8?q?=20=E4=BF=9D=E7=95=99=E6=97=A0=E6=95=88=20hash=20=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E5=88=B7=E6=96=B0=E4=B8=A2=E5=A4=B1=E6=A3=80=E7=B4=A2?= =?UTF-8?q?=E8=AF=8D=EF=BC=8C=E5=B9=B6=E9=98=B2=E6=AD=A2=E5=BC=B9=E7=AA=97?= =?UTF-8?q?=E6=97=B6=E5=BF=AB=E6=8D=B7=E9=94=AE=E6=8A=A2=E7=84=A6=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. writeUrl() 中仅在当前筛选下目标卡片可见时保留 location.hash,并在 replaceState 中传递 history.state 保留历史定位状态,避免 F5 刷新时因 hash 与新筛选条件冲突导致检索词被误重置。2. 全局 keydown 监听在长文弹窗或赞赏弹窗打开时跳过快捷键,避免 / 键窃取焦点破坏模态弹窗体验。 --- index.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 55ccd9287..843b4b8ac 100644 --- a/index.html +++ b/index.html @@ -1157,7 +1157,10 @@

    高性价比人生指南

    for (const d of DIMS) if (state[d].size) p.set(d, [...state[d]].join(',')); if (state.dispute) p.set('dispute','1'); if (state.todo) p.set('todo','1'); if (PERF.on) p.set('perf','1'); - const qs = p.toString(); history.replaceState(null, '', (qs ? '?'+qs : location.pathname) + location.hash); + const qs = p.toString(); + const hash = location.hash; + const validHash = hash && document.getElementById(hash.slice(1))?.offsetParent ? hash : ''; + history.replaceState(history.state, '', (qs ? '?'+qs : location.pathname) + validHash); } function syncControls(){ document.getElementById('q').value = state.q; @@ -1278,6 +1281,7 @@

    高性价比人生指南

    document.getElementById('reset').addEventListener('click', reset); document.getElementById('reset2').addEventListener('click', reset); document.addEventListener('keydown', e => { + if (!DM.mask.hidden || !TIP.hidden) return; if (e.key === '/' && !/INPUT|TEXTAREA/.test(document.activeElement.tagName)) { e.preventDefault(); document.getElementById('q').focus(); } if (e.key === 'Escape') { if (document.activeElement.id === 'q') document.activeElement.blur(); setMenu(false); } }); From 578cc0479d19c0760839250be316d839d177f882 Mon Sep 17 00:00:00 2001 From: Praveen Bishnoi Date: Tue, 13 Oct 2026 17:21:52 +0530 Subject: [PATCH 4/5] =?UTF-8?q?fix(selfcheck):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9C=AA=E5=9B=9E=E7=AD=94=E4=BB=BB=E4=BD=95=E5=85=B7=E4=BD=93?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E6=97=B6=E5=88=A4=E5=AE=9A=E6=96=87=E6=A1=88?= =?UTF-8?q?=E8=87=AA=E7=9B=B8=E7=9F=9B=E7=9B=BE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当读者仅填写基本情况、未回答任何一道生活自查题目时,因 no.length === 0,原代码会触发 !no.length 判定并输出「书里这些事你都做到了」。限制仅在 answered > 0 时才显示该文案,若未答题则提示返回作答,消除逻辑矛盾。 --- selfcheck.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/selfcheck.html b/selfcheck.html index 092773a30..d16a00c1b 100644 --- a/selfcheck.html +++ b/selfcheck.html @@ -378,7 +378,8 @@

    已经做到的

    const good = no.filter(q => q.entry.ratio !== '一般'), disp = no.filter(q => q.entry.dispute); const weak = groups.find(r => r.t >= 2 && r.pct < 1); let v = `你答了 ${answered} 题,做到 ${yes.length} 项,没做到 ${no.length} 项。`; - if (!no.length) v += '书里这些事你都做到了。'; + if (answered > 0 && !no.length) v += '书里这些事你都做到了。'; + else if (!answered) v += '你还没有回答任何具体题目,返回答题后查看分析。'; if (weak) v += `漏得最多的是「${esc(weak.g.name)}」,${weak.t} 项里做到 ${weak.y} 项。`; if (easy.length) v += `没做到的里有 ${easy.length} 项一次办完就行,不用改习惯` + (free.length ? `,其中 ${free.length} 项不花钱。` : '。'); if (disp.length) v += `有 ${disp.length} 项证据有争议,先看原条目的备注再决定。`; From ccfd999b0ee37c2cf6ff0c4d7ec49ba41b68b068 Mon Sep 17 00:00:00 2001 From: Praveen Bishnoi Date: Tue, 13 Oct 2026 17:22:07 +0530 Subject: [PATCH 5/5] =?UTF-8?q?fix(selfcheck):=20=E9=98=B2=E5=BE=A1?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E6=96=B0=E6=88=90=E6=9C=AC=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E6=97=B6=E4=BA=A7=E7=94=9F=E7=9A=84=E6=9C=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E6=B1=A1=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 全书引入「人群=」标签后,因标签字典未做存在性判断,会导致每个条目对象被注入 undefined 属性。增加映射检查,仅在属性存在时赋值,增强解析健壮性。 --- selfcheck.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selfcheck.html b/selfcheck.html index d16a00c1b..731e36c32 100644 --- a/selfcheck.html +++ b/selfcheck.html @@ -278,7 +278,7 @@

    已经做到的

    if ((m = /^### (\d+)\. (.+)$/.exec(line)) && sec) { e = {sec, n:+m[1], title:m[2].trim(), human:'', cost:'', grade:'', note:''}; out.push(e); continue; } if (!e) continue; if ((m = /^\x3c!--\s*成本标签:\s*(.*?)\s*-->/.exec(line))){ - for (const kv of m[1].split(/\s+/)){ const [k,v] = kv.split('='); e[{'钱':'money','时间':'time','毅力':'will','收益':'level','口径':'lens'}[k]] = v; } + for (const kv of m[1].split(/\s+/)){ const [k,v] = kv.split('='); const p = {'钱':'money','时间':'time','毅力':'will','收益':'level','口径':'lens'}[k]; if (p) e[p] = v; } } else if ((m = /^- 说人话:(.*)$/.exec(line))) e.human = m[1]; else if ((m = /^- 成本:(.*)$/.exec(line))) e.cost = m[1];