fix(frontend): rehydrate 根节点兼容 Element 无 getElementById

评论排序/点赞在 AJAX rehydrate 时 root 为 Element,调用 getElementById 抛 TypeError;改为 Document/Element 安全查找,并补上评论排序委托点击。
This commit is contained in:
kate522 committed 2026-07-12 14:39:39 +08:00
1 parent ab9bb9a145
commit 4fe4d79da0
2 files changed
+58 -8

No files matched your search

+18 -2
View File
@@ -142,10 +142,26 @@
button.classList.toggle("is-loading", !!busy);
}
function findInScope(scope, id) {
scope = scope || document;
if (!scope) return null;
if (scope.nodeType === 9) {
return scope.getElementById(id);
}
if (scope.nodeType === 1) {
if (scope.id === id) return scope;
return typeof scope.querySelector === "function"
? scope.querySelector("#" + id)
: null;
}
return null;
}
function initInteractionBar(root) {
var scope = root || document;
var likeBtn = scope.getElementById("action-like");
var favBtn = scope.getElementById("action-favorite");
// Element roots (AJAX rehydrate) do not implement getElementById
var likeBtn = findInScope(scope, "action-like");
var favBtn = findInScope(scope, "action-favorite");
if (likeBtn && likeBtn.dataset.aksrtInteractionBound) return;
if (favBtn && favBtn.dataset.aksrtInteractionBound) return;