2015-01-22 5 views
1

나는 html 텍스트 영역을 가지고 있으며, 캐럿이있는 위치에 따라 단어를 텍스트에서 추출해야합니다.캐럿이있는 위치에 따라 텍스트 영역에서 전체 단어를 추출하십시오.

그래서 캐럿이 단어에 있거나 단어의 시작 부분 (또는 끝 부분)에있는 경우이를 가져와야합니다.

어떻게 할 수 있습니까? 라이브러리를 찾고 있지 않다. 평범한 자바 스크립트. 도와주세요.

+0

"foo^bar"와 (과) 비슷한가요? –

답변

3

다음은 작업을 수행 할 수있는 코드입니다. 기본적으로 캐럿 위치를 추출하십시오. 문장을 배열로 변환하십시오. 길이가 단어를 찾은 캐럿 위치보다 큰 경우 단어 길이를 함께 추가하는 루프 배열입니다.

<html> 
<script> 


    function getCaret(node) { 
     if (node.selectionStart) { 
     return node.selectionStart; 
     } else if (!document.selection) { 
     return 0; 
     } 

     var c = "\001", 
      sel = document.selection.createRange(), 
      dul = sel.duplicate(), 
      len = 0; 

     dul.moveToElementText(node); 
     sel.text = c; 
     len = dul.text.indexOf(c); 
     sel.moveStart('character',-1); 
     sel.text = ""; 
     return len; 
    } 

    function getWord() 
    { 

     var el = document.getElementById('myText'); 
     var carret = getCaret(el); 
     var words = el.value.split(' '); 
     var x = 0; 

     for(var i = 0; i < words.length; i++) 
     { 
      debugger; 
      x += words[i].length + 1; 
      if(x > carret){ return words[i]; } 
     } 


    } 

    function myWord() 
    { 
     var word = getWord(); 
     alert(word); 
    } 

</script> 

<body> 

    <button onclick="myWord();" >Get word</button> 
    <textarea id="myText">This is a hallo world sentence</textarea> 

</body> 
</html> 
+0

var words = el.value.split ('');하고 있습니다. 하지만 새로운 줄 (/ n) 또는/r이 될 수도 있습니다 – ghostCoder

+0

항상 정규식 분할을 수행 할 수 있습니다. 예 : 단어 경계에서 분리하려면 다음을 사용하십시오. el.value.split (/ \ b /); 이 알고리즘을 사용하면 시력을 조정해야합니다. x + = words [i] .length; (제거 +1;). 교장이 거기에있다. 답장으로 표시하는 것을 잊지 마십시오. – MarzSocks

+1

예/\ s + | \ n | \ r/:) – ghostCoder