> 웹 프론트엔드 > JS 튜토리얼 > HTML 요소 내에서 문자 오프셋을 정확하게 결정하는 방법은 무엇입니까?

HTML 요소 내에서 문자 오프셋을 정확하게 결정하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-19 04:42:02
원래의
676명이 탐색했습니다.

How to Accurately Determine Character Offsets Within an HTML Element?

상위 컨테이너를 기준으로 범위 시작 및 끝 오프셋 계산

아래와 같은 HTML 요소가 있다고 가정해 보겠습니다.

<div>
로그인 후 복사

그리고 사용자는 마우스로 '집'이라는 텍스트를 선택합니다. "#parent" 요소 내의 문자 오프셋을 결정하는 것은 특히 HTML 태그를 선택할 때 일반적인 작업입니다.

"range.startOffset" 속성은 직접 컨테이너를 기준으로 오프셋을 제공하지만 문자 오프셋으로 제한됩니다. 컨테이너가 텍스트 노드인 경우. 이러한 제한을 극복하기 위해 업데이트된 솔루션을 제시합니다.

function getSelectionCharacterOffsetWithin(element) {
  var start = 0;
  var end = 0;
  var doc = element.ownerDocument || element.document;
  var win = doc.defaultView || doc.parentWindow;
  var sel;
  if (typeof win.getSelection != "undefined") {
    sel = win.getSelection();
    if (sel.rangeCount > 0) {
      var range = win.getSelection().getRangeAt(0);
      var preCaretRange = range.cloneRange();
      preCaretRange.selectNodeContents(element);
      preCaretRange.setEnd(range.startContainer, range.startOffset);
      start = preCaretRange.toString().length;
      preCaretRange.setEnd(range.endContainer, range.endOffset);
      end = preCaretRange.toString().length;
    }
  } else if ((sel = doc.selection) &amp;&amp; sel.type != "Control") {
    var textRange = sel.createRange();
    var preCaretTextRange = doc.body.createTextRange();
    preCaretTextRange.moveToElementText(element);
    preCaretTextRange.setEndPoint("EndToStart", textRange);
    start = preCaretTextRange.text.length;
    preCaretTextRange.setEndPoint("EndToEnd", textRange);
    end = preCaretTextRange.text.length;
  }
  return { start: start, end: end };
}
로그인 후 복사

업데이트된 방법을 시연하기 위해 이벤트 리스너를 초기화하여 선택 변경 사항을 캡처하고 페이지의 로그 요소를 업데이트합니다.

function reportSelection() {
  var selOffsets = getSelectionCharacterOffsetWithin(
    document.getElementById("editor")
  );
  document.getElementById("selectionLog").innerHTML =
    "Selection offsets: " + selOffsets.start + ", " + selOffsets.end;
}

window.onload = function () {
  document.addEventListener("selectionchange", reportSelection, false);
  document.addEventListener("mouseup", reportSelection, false);
  document.addEventListener("mousedown", reportSelection, false);
  document.addEventListener("keyup", reportSelection, false);
};
로그인 후 복사

이 코드를 사용하면 HTML 태그를 선택할 때에도 HTML 요소 내에서 사용자 선택의 문자 오프셋을 정확하게 결정할 수 있습니다.

위 내용은 HTML 요소 내에서 문자 오프셋을 정확하게 결정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿