From 1e3f4d4ba520232e748fb46396174e0a9b5f50a4 Mon Sep 17 00:00:00 2001 From: Metona Date: Sun, 5 Apr 2026 00:38:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BD=BB=E5=BA=95=E4=BF=AE=E5=A4=8DRAG?= =?UTF-8?q?=E4=B8=8B=E6=B6=88=E6=81=AF=E4=B8=8D=E6=98=BE=E7=A4=BA=20-=20?= =?UTF-8?q?=E7=94=A8=E6=A8=A1=E5=9D=97=E5=8F=98=E9=87=8F=E6=9B=BF=E4=BB=A3?= =?UTF-8?q?CSS=E9=80=89=E6=8B=A9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根本原因:所有CSS选择器方案都依赖DOM位置关系, 而 appendSystemMessage 在 placeholder 之后插入 div 会破坏这种关系。 解决方案:用模块变量 currentPlaceholder 直接持有 placeholder DOM 引用, updateLastAssistantMessage 直接读取该引用,完全不依赖选择器。 - appendAssistantPlaceholder: 设置 currentPlaceholder = div - updateLastAssistantMessage: 使用 currentPlaceholder,首次调用移除 loading - clearMessages: 清除 currentPlaceholder --- js/components/chat-area.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/js/components/chat-area.js b/js/components/chat-area.js index b29c394..fc0b097 100644 --- a/js/components/chat-area.js +++ b/js/components/chat-area.js @@ -39,6 +39,7 @@ function getFileIcon(filename) { let chatAreaEl, messagesContainerEl, emptyStateEl, scrollBtnEl; let autoScroll = true; // 是否自动滚动到底部 +let currentPlaceholder = null; // 当前流式消息的 placeholder 引用 export function initChatArea() { chatAreaEl = document.querySelector('#chatArea'); @@ -221,11 +222,8 @@ export function appendMessageDOM(msg, index) { /** 更新最后一条 assistant 消息(流式输出) */ export function updateLastAssistantMessage(content, think, stats, model) { - let lastMsg = messagesContainerEl.querySelector('.message.assistant.loading'); - if (!lastMsg) { - // loading class 已在首次调用时移除,用 last-of-type 回退 - lastMsg = messagesContainerEl.querySelector('.message.assistant:last-of-type'); - } + // 使用 placeholder 引用,完全不依赖 CSS 选择器 + const lastMsg = currentPlaceholder; if (!lastMsg) return; // 仅首次调用时移除 loading 指示器 @@ -306,6 +304,7 @@ export function appendAssistantPlaceholder() { `; messagesContainerEl.appendChild(div); + currentPlaceholder = div; scrollToBottom(); } @@ -328,6 +327,7 @@ export function getMessagesContainer() { /** 清空消息 DOM */ export function clearMessages() { messagesContainerEl.innerHTML = ''; + currentPlaceholder = null; } /** 重置自动滚动(用户发送消息、新建会话时调用) */