From e92628d45549f50e40ad355e2fc08534aba0f756 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Fri, 9 Jan 2026 23:45:00 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/16801 --- app/src/protyle/util/selection.ts | 3 ++- app/src/protyle/wysiwyg/getBlock.ts | 6 +++++- app/src/protyle/wysiwyg/remove.ts | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/protyle/util/selection.ts b/app/src/protyle/util/selection.ts index 1ef4d442a..40e505de0 100644 --- a/app/src/protyle/util/selection.ts +++ b/app/src/protyle/util/selection.ts @@ -3,6 +3,7 @@ import { getNextBlock, getPreviousBlock, hasPreviousSibling, + isContainerBlock, isNotEditBlock } from "../wysiwyg/getBlock"; import {hasClosestBlock, hasClosestByAttribute, hasClosestByTag} from "./hasClosest"; @@ -725,7 +726,7 @@ export const focusBlock = (element: Element, parentElement?: HTMLElement, toStar parentElement.focus(); } else { // li 下面为 hr、嵌入块、数学公式、iframe、音频、视频、图表渲染块等时递归处理 - if (element.classList.contains("li") || element.classList.contains("sb") || element.classList.contains("bq") || element.classList.contains("callout")) { + if (isContainerBlock(element)) { return focusBlock(element.querySelector("[data-node-id]"), parentElement, toStart); } } diff --git a/app/src/protyle/wysiwyg/getBlock.ts b/app/src/protyle/wysiwyg/getBlock.ts index 5771f1311..9473c65ee 100644 --- a/app/src/protyle/wysiwyg/getBlock.ts +++ b/app/src/protyle/wysiwyg/getBlock.ts @@ -110,8 +110,12 @@ export const getContenteditableElement = (element: Element): Element => { return undefined; }; +export const isContainerBlock = (element: Element) => { + return element.classList.contains("list") || element.classList.contains("li") || element.classList.contains("sb") || element.classList.contains("bq") || element.classList.contains("callout"); +}; + export const isNotEditBlock = (element: Element) => { - if (element.classList.contains("li") || element.classList.contains("sb") || element.classList.contains("bq") || element.classList.contains("callout")) { + if (isContainerBlock(element)) { let hasEditable = false; Array.from(element.querySelectorAll("[data-node-id]")).find(item => { if (!isNotEditBlock(item)) { diff --git a/app/src/protyle/wysiwyg/remove.ts b/app/src/protyle/wysiwyg/remove.ts index a2d473a07..7baab72c7 100644 --- a/app/src/protyle/wysiwyg/remove.ts +++ b/app/src/protyle/wysiwyg/remove.ts @@ -265,7 +265,7 @@ export const removeBlock = async (protyle: IProtyle, blockElement: Element, rang } const blockType = blockElement.getAttribute("data-type"); // 空代码块直接删除 - if (blockType === "NodeCodeBlock" && getContenteditableElement(blockElement).textContent.trim() === "") { + if (blockType === "NodeCodeBlock" && getContenteditableElement(blockElement)?.textContent.trim() === "") { blockElement.classList.add("protyle-wysiwyg--select"); removeBlock(protyle, blockElement, range, type); return;