From 6b8fba827b2cac3d06105faf7931753b18721311 Mon Sep 17 00:00:00 2001 From: zqlit Date: Mon, 5 Oct 2026 18:21:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=AF=84=E8=AE=BA):=20=E5=BE=BD=E7=AB=A0?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=85=9C=E5=BA=95=20=E2=80=94=E2=80=94=20?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=BE=BD=E7=AB=A0(=E5=8D=9A=E4=B8=BB/?= =?UTF-8?q?=E5=B0=8F=E7=BC=96)=E6=81=92=E5=AE=9A=E6=8E=92=E5=9C=A8?= =?UTF-8?q?=E6=9C=80=E5=89=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 现象:普通用户的 badge_name 徽章(如「小编」)会排在 友链/友圈/官职之后,与「博主」的位置不一致(管理员路径下系统徽章 在 .atk-badge-wrap 里、会被提前,普通用户路径则可能被追加到末尾)。 修法:拆掉 .atk-badge-wrap 后做一次确定性重排,按 系统徽章 > 置顶 > 头衔 > 友链 > 友圈 > 官职 的优先级依序 append 回 昵称(DocumentFragment 移动保序)。不管 Artalk 把系统徽章渲染在哪 都会归位,以后新徽章只要补进 PRIO 数组即可。 本地验证:CDP 注入 fetch 拦截给小十的评论加 badge_name=小编, 完整复现截图场景 → 顺序 小编 友链 友圈 司户参军 ✅ --- themes/Ying/assets/js/modules/artalk.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/themes/Ying/assets/js/modules/artalk.js b/themes/Ying/assets/js/modules/artalk.js index cecd5189..a48fcdfe 100644 --- a/themes/Ying/assets/js/modules/artalk.js +++ b/themes/Ying/assets/js/modules/artalk.js @@ -1302,6 +1302,18 @@ artalk.on('comment-rendered', function(node) { while (wrap.firstChild) wrapParent.insertBefore(wrap.firstChild, wrap); wrapParent.removeChild(wrap); } + // 5.5) 统一排序兜底:不管 Artalk 把系统徽章渲染在哪、什么时候渲染, + // 最终顺序强制为:系统徽章(博主/小编) > 置顶 > 头衔 > 友链 > 友圈 > 官职。 + // 实测:管理员的系统徽章在 .atk-badge-wrap 里、走上面的逻辑会排在最前; + // 普通用户的 badge_name 徽章(小编)由 Artalk 稍后直接追加到昵称末尾, + // 会排到友链/友圈/官职后面 —— 这里按优先级重排,两种路径都归位。 + var PRIO = ['.atk-badge', '.atk-pinned-badge', '.atk-title-badge', '.atk-link-badge', '.atk-feed-badge', '.atk-rank-badge']; + var badgeFrag = document.createDocumentFragment(); + for (var pi = 0; pi < PRIO.length; pi++) { + var priEls = nickEl.querySelectorAll(PRIO[pi]); + for (var pei = 0; pei < priEls.length; pei++) badgeFrag.appendChild(priEls[pei]); + } + nickEl.appendChild(badgeFrag); // 6) 所有徽章挂同一个类,几何样式(尺寸/内边距/圆角/字重/对齐)只由 // .atk-cmt-badge 一处定义,从此不会有"两种徽章尺寸不一致"的问题 var allBadges = nickEl.querySelectorAll(