Skip to content

Commit e0215b4

Browse files
committed
fix: 스타일 적용된 태그에 스페이스만 남아있을 때 에러나는 문제
1 parent 21593f0 commit e0215b4

File tree

2 files changed

+3
-19
lines changed

2 files changed

+3
-19
lines changed

client/src/features/editor/components/block/Block.tsx

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ export const Block: React.FC<BlockProps> = memo(
117117
const [slashModalPosition, setSlashModalPosition] = useState({ top: 0, left: 0 });
118118

119119
const handleInput = (e: React.FormEvent<HTMLDivElement>) => {
120-
const currentElement = e.currentTarget;
121120
// 텍스트를 삭제하면 <br> 태그가 생김
122121
// 이를 방지하기 위해 <br> 태그 찾아서 모두 삭제
123122
const brElements = e.currentTarget.getElementsByTagName("br");
@@ -126,22 +125,6 @@ export const Block: React.FC<BlockProps> = memo(
126125
Array.from(brElements).forEach((br) => br.remove());
127126
}
128127

129-
// 빈 span 태그 제거
130-
const cleanEmptySpans = (element: HTMLElement) => {
131-
const spans = element.getElementsByTagName("span");
132-
Array.from(spans).forEach((span) => {
133-
// 텍스트 컨텐츠가 없거나 공백만 있는 경우
134-
// 텍스트 컨텐츠가 없거나 공백만 있는 경우
135-
if (!span.textContent || span.textContent.trim() === "") {
136-
if (span.parentNode) {
137-
span.parentNode.removeChild(span);
138-
}
139-
}
140-
});
141-
};
142-
143-
cleanEmptySpans(currentElement);
144-
145128
const caretPosition = getAbsoluteCaretPosition(e.currentTarget);
146129
block.crdt.currentCaret = caretPosition;
147130

client/src/features/editor/utils/domSyncUtils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export const setInnerHTML = ({ element, block }: SetInnerHTMLProps): void => {
106106
// 새로운 스타일 조합으로 span 태그 열기
107107
if (styleChanged) {
108108
const className = getClassNames(targetState);
109-
html += `<span class="${className}">`;
109+
html += `<span class="${className}" style="white-space: pre;">`;
110110
spanOpen = true;
111111
}
112112

@@ -139,13 +139,14 @@ const setsEqual = (a: Set<string>, b: Set<string>): boolean => {
139139
};
140140

141141
const sanitizeText = (text: string): string => {
142-
return text.replace(/<br>/g, "\u00A0").replace(/[<>&"']/g, (match) => {
142+
return text.replace(/<br>/g, "\u00A0").replace(/[<>&"'\s]/g, (match) => {
143143
const escapeMap: Record<string, string> = {
144144
"<": "&lt;",
145145
">": "&gt;",
146146
"&": "&amp;",
147147
'"': "&quot;",
148148
"'": "&#x27;",
149+
" ": "&nbsp;",
149150
};
150151
return escapeMap[match] || match;
151152
});

0 commit comments

Comments
 (0)