>웹 프론트엔드 >JS 튜토리얼 >ContentEditable Div에서 커서 위치를 설정하고 유지하는 방법은 무엇입니까?

ContentEditable Div에서 커서 위치를 설정하고 유지하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-15 03:21:02713검색

How to Set and Maintain Cursor Position in a ContentEditable Div?

contentEditable <div>에 커서 위치 설정

contentEditable <div>를 처리할 때 기본 브라우저 기능은 커서 위치를 텍스트의 시작 부분으로 재설정합니다. 초점을 되찾은 후. 이 문제를 해결하려면 다음 해결 방법을 고려하십시오.

커서 위치 저장 및 복원:

  1. 현재 위치 저장: onmouseup 및 onkeyup 이벤트, 현재 커서 위치를 변수에 저장하고, savedRange.
  2. 위치 복원: onfocus 이벤트에서,savedRange에서 저장된 선택을 복원합니다.

이 접근 방식은 커서가 마지막으로 알려진 위치에 위치하도록 보장합니다. div가 포커스를 다시 얻었을 때.

처리 클릭수:

div 클릭 시 선택을 복원하려면 다음 추가 단계가 필요합니다.

  1. 클릭 이벤트 취소: cancelEvent() 첨부 onclick 및 onmousedown 이벤트에. 이 함수는 이러한 이벤트의 기본 동작을 방지하고 RestoreSelection()을 호출합니다.
  2. 포커스 상태 추적: isInFocus 변수를 사용하여 div에 포커스가 있는지 확인합니다. div에 포커스가 없을 때만 클릭 이벤트를 취소하세요.

작업 코드:

<div>
var savedRange, isInFocus;

function saveSelection() {
  savedRange = window.getSelection ? window.getSelection().getRangeAt(0) : document.selection.createRange();
}

function restoreSelection() {
  isInFocus = true;
  document.getElementById("area").focus();

  if (savedRange) {
    if (window.getSelection) {
      var s = window.getSelection();
      s.removeAllRanges();
      s.addRange(savedRange);
    } else if (document.createRange) {
      window.getSelection().addRange(savedRange);
    } else if (document.selection) {
      savedRange.select();
    }
  }
}

function onDivBlur() {
  isInFocus = false;
}

function cancelEvent(e) {
  if (isInFocus === false && savedRange) {
    if (e && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    } else {
      window.event.cancelBubble = true;
    }
    restoreSelection();
    return false;
  }
}

위 내용은 ContentEditable Div에서 커서 위치를 설정하고 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.