diff --git a/src/editor/core/range/RangeManager.ts b/src/editor/core/range/RangeManager.ts index 5e30147..76b14ed 100644 --- a/src/editor/core/range/RangeManager.ts +++ b/src/editor/core/range/RangeManager.ts @@ -232,13 +232,19 @@ export class RangeManager { public getIsSelectAll() { const elementList = this.draw.getElementList() const { startIndex, endIndex } = this.range - return startIndex === 0 && elementList.length - 1 === endIndex + return ( + startIndex === 0 && + elementList.length - 1 === endIndex && + !this.position.getPositionContext().isTable + ) } public getIsPointInRange(x: number, y: number): boolean { const { startIndex, endIndex } = this.range const positionList = this.position.getPositionList() for (let p = startIndex + 1; p <= endIndex; p++) { + const position = positionList[p] + if (!position) break const { coordinate: { leftTop, rightBottom } } = positionList[p] diff --git a/src/editor/utils/element.ts b/src/editor/utils/element.ts index aed9d1d..c10a4a0 100644 --- a/src/editor/utils/element.ts +++ b/src/editor/utils/element.ts @@ -645,6 +645,8 @@ export function formatElementContext( const copyElement = getAnchorElement(sourceElementList, anchorIndex) if (!copyElement) return const { isBreakWhenWrap = false } = options || {} + // 是否已经换行 + let isBreakWarped = false for (let e = 0; e < formatElementList.length; e++) { const targetElement = formatElementList[e] if ( @@ -652,10 +654,15 @@ export function formatElementContext( !copyElement.listId && /^\n/.test(targetElement.value) ) { - break + isBreakWarped = true } - // 定位元素非列表,无需处理粘贴列表的上下文 - if (!copyElement.listId && targetElement.type === ElementType.LIST) { + // 1. 即使换行停止也要处理表格上下文信息 + // 2. 定位元素非列表,无需处理粘贴列表的上下文,仅处理表格上下文信息 + if ( + isBreakWarped || + (!copyElement.listId && targetElement.type === ElementType.LIST) + ) { + cloneProperty(TABLE_CONTEXT_ATTR, copyElement, targetElement) targetElement.valueList?.forEach(valueItem => { cloneProperty(TABLE_CONTEXT_ATTR, copyElement, valueItem) })