fix(frontend): rehydrate 根节点兼容 Element 无 getElementById
评论排序/点赞在 AJAX rehydrate 时 root 为 Element,调用 getElementById 抛 TypeError;改为 Document/Element 安全查找,并补上评论排序委托点击。
This commit is contained in:
1 parent
ab9bb9a145
commit
4fe4d79da0
2 files changed
+58
-8
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user