contenteditable 요소의 노드에 캐럿을 설정하는 방법

비밀



요소에서 foucs()에 의해서만 contenteditable 요소에 캐럿을 설정할 수 없습니다.

코드 샘플



자바스크립트




const setCaret = (
  contenteditableElement,
  node,
  position
) => {
  const selection = window.getSelection();
  if (!selection) return;

  // Create a new range
  const range = document.createRange();
  range.setStart(node, position);
  range.collapse(true);

  // Remove the current range
  selection.removeAllRanges();

  // Add the new range
  selection.addRange(range);

  // Focus on the contenteditable element instead of the node if needed.
  contenteditableElement.focus();
};


타입스크립트




const setCaret = (
  contenteditableElement: HTMLElement,
  node: Node,
  position: number
): void => {
  const selection = window.getSelection();
  if (!selection) return;

  // Create a new range
  const range = document.createRange();
  range.setStart(node, position);
  range.collapse(true);

  // Remove the current range
  selection.removeAllRanges();

  // Add the new range
  selection.addRange(range);

  // Focus on the contenteditable element instead of the node if needed.
  contenteditableElement.focus();
};


세부 사항




range.collapse(true);


Range.collapsed을 true로 설정합니다. 이는 범위의 시작점과 끝점이 같은 위치에 있음을 의미합니다.

참조


  • Selection
  • Window.getSelection()
  • Document.createRange()
  • Range.collapsed
  • Range.collapse()
  • Range.setStart()
  • Selection.removeAllRanges()
  • Selection.addRange()
  • HTMLElement.focus()
  • 좋은 웹페이지 즐겨찾기