diff --git a/app/src/protyle/util/selection.ts b/app/src/protyle/util/selection.ts index 995426bcb..7241237db 100644 --- a/app/src/protyle/util/selection.ts +++ b/app/src/protyle/util/selection.ts @@ -116,6 +116,9 @@ export const getEditorRange = (element: Element) => { targetElement = getContenteditableElement(element); if (!targetElement) { targetElement = element; + } else if (targetElement.tagName === "TABLE") { + // 文档中开头为表格,获取错误 https://ld246.com/article/1663408335459?r=88250 + targetElement = targetElement.querySelector("th") || element.querySelector("td"); } } range = targetElement.ownerDocument.createRange(); diff --git a/app/src/protyle/wysiwyg/getBlock.ts b/app/src/protyle/wysiwyg/getBlock.ts index 64145c109..a9d641e56 100644 --- a/app/src/protyle/wysiwyg/getBlock.ts +++ b/app/src/protyle/wysiwyg/getBlock.ts @@ -78,7 +78,7 @@ export const getNoContainerElement = (element: Element) => { }; export const getContenteditableElement = (element: Element) => { - if (!element || element.getAttribute("contenteditable") === "true") { + if (!element || (element.getAttribute("contenteditable") === "true") && !element.classList.contains("protyle-wysiwyg")) { return element; } return element.querySelector('[contenteditable="true"]'); diff --git a/app/src/protyle/wysiwyg/index.ts b/app/src/protyle/wysiwyg/index.ts index 411a4a9b1..428cce0ac 100644 --- a/app/src/protyle/wysiwyg/index.ts +++ b/app/src/protyle/wysiwyg/index.ts @@ -1727,7 +1727,7 @@ export class WYSIWYG { const emptyEditElement = getContenteditableElement(emptyElement) as HTMLInputElement; range.selectNodeContents(emptyEditElement); range.collapse(true); - emptyEditElement.focus(); + focusByRange(range) } else if (lastEditElement) { range.selectNodeContents(lastEditElement); range.collapse(false); @@ -1746,6 +1746,10 @@ export class WYSIWYG { if (!protyle.wysiwyg.element.querySelector(".protyle-wysiwyg--select")) { countSelectWord(newRange); } + if (getSelection().rangeCount === 0) { + // https://github.com/siyuan-note/siyuan/issues/5901 + focusByRange(newRange) + } /// #if !MOBILE pushBack(protyle, newRange); /// #endif