window.getSelection()

최정은·2023년 2월 13일
0

JavaScript

목록 보기
8/9
post-custom-banner
window.getSelection()

사용자 또는 Caret의 위치에 따라 선택된 텍스트의 범위를 나타내는 Selection 객체를 반환한다.

window.getSelection().toString()을 호출하면 선택된 text를 반환한다.

const selectionText = window.getSelection().toString();

console.log('원하는 문장', selectionText);
const selection = window.getSelection();

console.log(selection.anchorNode); // 선택한(드래그 한) 일부분에 대한 전체 node를 반환한다.
console.log(selection.anchorOffset); // 드래그 한 처음 위치 index
console.log(selection.focusNode); // 마지막 포커스 된 부분에 대한 전체 node를 반환. 
console.log(selection.focusOffset); // 드래그 한 마지막 위치 index
console.log(selection.isCollapsed); // 커서가 드래그를 처음 한 위치랑 같은지 확인 (같으면 true, 아니면 false)
console.log(selection.type); // 드래그 위치와 마지막 커서가 같으면 'caret' 아닐 경우 'range'

내가 사용 한 곳

: 글자를 드래그 했을땐 접고/펼치기 기능이 동작 안되고 단순히 클릭만 했을 경우엔 접고/펼치기 기능이 동작하도록.

const [isFolding, setIsFolding] = useState<boolean>(false);

  const handleClickSentence = useCallback(() => {
    const selection = window.getSelection();
    selection.isCollapsed && setIsFolding(prev => !prev);
  }, []);

  return (
    <div onClick={handleClickSentence}>
      {isFolding ? (
        <div>접혔습니다.(눌러서 펼치십쇼)</div>
      ) : (
        <div>
          엄청나게 긴 지문입니다. 테스트용으로 한거여서 맞춤법이랑 띄어쓰기가
          맞지 않을 수 있습니다. 개발은 정말 재미있습니다! 하하하! 전체 문장을
          나타내는건가?
        </div>
      )}
    </div>
  );

결과

post-custom-banner

0개의 댓글