Javascript Textareaのカーソル位置を設定して取得する方法

4277 ワード




JS     Textarea     
  
    var isIE = !(!document.all);
    function posCursor(){
      var start=0,end=0; 
      var oTextarea = document.getElementById("textarea");
      if(isIE){
        //selection        ,      , /                  。
        //createRange             TextRange   ,
        //           controlRange   。
        var sTextRange= document.selection.createRange();

        //        textarea  
        if(sTextRange.parentElement()== oTextarea){
          //    TextRange  
          var oTextRange = document.body.createTextRange();
          //                               。
          oTextRange.moveToElementText(oTextarea);
          
          //       TextRange
          //oTextRange   (textarea)    TextRange  
          //sTextRange        TextRange  
    
          //compareEndPoints    ,compareEndPoints        TextRange     
          //StartToEnd    TextRange     TextRange   。
          //StartToStart  TextRange     TextRange   。
          //EndToStart    TextRange     TextRange   。
          //EndToEnd      TextRange     TextRange   。
    
          //moveStart    ,         
          //character      
          //word            
          //sentence       
          //textedit        
    
          //      oTextRange sTextRange   ,           
          for (start=0; oTextRange.compareEndPoints("StartToStart", sTextRange) < 0; start++){ 
            oTextRange.moveStart('character', 1); 
          }
          //      
(
, ) for (var i = 0; i <= start; i ++){ if (oTextarea.value.charAt(i) == '
'){ start++; } } // oTextRange.moveToElementText(oTextarea); for (end = 0; oTextRange.compareEndPoints('StartToEnd', sTextRange) < 0; end ++){ oTextRange.moveStart('character', 1); } for (var i = 0; i <= end; i ++){ if (oTextarea.value.charAt(i) == '
'){ end++; } } } }else{ start = oTextarea.selectionStart; end = oTextarea.selectionEnd; } document.getElementById("start").value = start; document.getElementById("end").value = end; } function moveCursor(){ var oTextarea = document.getElementById("textarea"); var start = parseInt(document.getElementById("start").value); var end = parseInt(document.getElementById("end").value); if(isNaN(start)||isNaN(end)){ alert(" "); } if(isIE){ var oTextRange = oTextarea.createTextRange(); var LStart = start; var LEnd = end; var start = 0; var end = 0; var value = oTextarea.value; for(var i=0; i<value.length && i<LStart; i++){ var c = value.charAt(i); if(c!='
'){ start++; } } for(var i=value.length-1; i>=LEnd && i>=0; i--){ var c = value.charAt(i); if(c!='
'){ end++; } } oTextRange.moveStart('character', start); oTextRange.moveEnd('character', -end); //oTextRange.collapse(true); oTextRange.select(); oTextarea.focus(); }else{ oTextarea.select(); oTextarea.selectionStart=start; oTextarea.selectionEnd=end; } }
start: end: