2009-12-20 2 views
0

HTML 텍스트 영역에 끌기 도구 &을 구현하려고 시도했지만 실패했습니다.HTML TextArea에서 커서/캐럿 값 설정 (또는 읽기)

드래그 & 드롭 메커니즘은 jQuery 또는 Scriptaculous (둘 다 사용)에서 비교적 쉽기 때문에이 두 가지 중 하나를 사용하는 대답을 기꺼이 받아 들일 수 있습니다.

문제는 삽입 지점을 읽거나 설정하는 방법을 찾지 못하는 것 같습니다.

궁극적으로 할 수있는 작업은 드롭 위치를 결정하고 텍스트 영역에서 정확하게 텍스트 위치를 결정하기 위해 수학적으로 계산 한 다음 캐럿 위치 (또는 삽입 지점)를 설정하고 배치 (삽입) 거기에 텍스트가 떨어졌습니다.

계산을 처리 할 수 ​​있습니다. 캐럿 위치를 읽거나 설정하는 방법을 알아야합니다. (결국 드롭 된 텍스트의 삽입 지점이됩니다.) 이것은 가능한가?

감사합니다 - 내가 JS의 Range 개체에 독서 함께 시작하는 것이 좋습니다

답변

1

내가 함께 몇 조각을 조립할하여이를 밖으로 일을 아이디어 등이 여기에 있습니다. 여기에 해결 방법입니다이 하나 : 나는 문서 ('draggable_text'

  • 사용 JQuery와의 클래스와 범위에 내가 드래그하고 싶었 텍스트의 각 섹션을 배치

    1. 준비 기능)을 사용하여 마우스 오버/마우스 아웃이 발생할 때마다 범위 내의 텍스트를 자동 선택/선택 취소 할 수 있습니다. 구현되는, 특별한 드래그 & 드롭 메커니즘이 필요없는이 방법을 사용하여, 흥미롭게도

      $(document).ready (
      
          $('.draggable_text').mouseover(
           function() { 
            selectNode(this); 
           } 
          ); 
      
          $('.draggable_text').mouseout(
           function() { 
            clearSelection(this); 
           } 
          ); 
      
      ); 
      
      function selectNode (node) { 
          var selection, range, doc, win; 
          if ((doc = node.ownerDocument) 
            && (win = doc.defaultView) 
            && typeof win.getSelection != 'undefined' 
            && typeof doc.createRange != 'undefined' 
            && (selection = window.getSelection()) 
            && typeof selection.removeAllRanges != 'undefined' 
           ) { 
           range = doc.createRange(); 
           range.selectNode(node); 
           selection.removeAllRanges(); 
           selection.addRange(range); 
          } else if (document.body 
             && typeof document.body.createTextRange != 'undefined' 
             && (range = document.body.createTextRange())) { 
           range.moveToElementText(node); 
           range.select(); 
          } 
      } 
      
      function clearSelection() { 
          if (document.selection) { 
           document.selection.empty(); 
          } else if (window.getSelection) { 
           window.getSelection().removeAllRanges(); 
          } 
      } 
      

      - 브라우저가 자동으로 드래그 할 때 가정 것으로 보인다 :

    .. 여기에 코드입니다 선택한 텍스트를 텍스트 영역에 복사하여 복사합니다. 완전한!

    나는 이것을 FF3, IE6 및 IE7 (WinXP 및 Vista)에서 테스트했습니다. 끌어서 놓기 그래픽은 각기 약간 씩 다르지만 모두 효과적이었습니다.

  • 0

    참조 플러그인. 이 플러그인은 현재 커서가 놓여있는 위치에 대한 정보를 얻는 데 도움이됩니다. 커서 위치의 설정 방법

    , 나는 다음과 같은 기능을 사용

    function setSelectionRange(input, selectionStart, selectionEnd) { 
        if (input.setSelectionRange) { 
        input.focus(); 
        input.setSelectionRange(selectionStart, selectionEnd); 
        } 
        else if (input.createTextRange) { 
        var range = input.createTextRange(); 
        range.collapse(true); 
        range.moveEnd('character', selectionEnd); 
        range.moveStart('character', selectionStart); 
        range.select(); 
        } 
    } 
    
    function setCaretToPos (input, pos) { 
        setSelectionRange(input, pos, pos); 
    } 
    

    를 사용해서이 같은 setCaretToPos 기능을 사용할 수 있습니다 :

    setCaretToPos(document.getElementById("textareaId"), 4);