`
Relucent
  • 浏览: 209430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Javascript设置和获取Textarea的光标位置的方法

    博客分类:
  • JS
阅读更多
<html><head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JS设置及获取Textarea的光标位置</title>
  <script>
    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); 
          }
          //需要计算一下\n的数目(按字符移动的方式不计\n,所以这里加上) 
          for (var i = 0; i <= start; i ++){
            if (oTextarea.value.charAt(i) == '\n'){ 
              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) == '\n'){ 
              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!='\n'){
            start++;
          }
        }
        for(var i=value.length-1; i>=LEnd && i>=0; i--){
          var c = value.charAt(i);
          if(c!='\n'){
            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;
      }
    } 
  </script>
  <body>
    <table border="1" cellspacing="0" cellpadding="0"> 
      <tr> 
        <td>start: <input type="text" id="start" size="3" value="0"/></td> 
        <td>end:   <input type="text" id="end"   size="3" value="0"/></td> 
      </tr> 
      <tr> 
      <td colspan="2"> 
        <textarea id="textarea"
          onKeydown="posCursor()" 
          onKeyup="posCursor()" 
          onmousedown="posCursor()" 
          onmouseup="posCursor()" 
          onfocus="posCursor()" 
          rows="14"
          cols="50">虞美人
春花秋月何时了,往事知多少。
小楼昨夜又东风,故国不堪回首月明中!
雕l栏玉砌应犹在,只是朱颜改。
问君能有几多愁?恰似一江春水向东流。</textarea> 
        </td> 
      </tr> 
      <tr> 
        <td></td> 
        <td><input type="button" onClick="moveCursor()" value="设置光标位置"/></td> 
      </tr> 
    </table> 
  </body>
</html>

 

分享到:
评论
6 楼 haisee 2012-11-13  
管用,Firefox和Chrom验证通过。
5 楼 cucumber 2010-08-08  
chrome 兼容吗???
4 楼 ksqqxq 2010-08-05  
正在找这样的东东呢!
3 楼 xieboxin 2010-07-25  
经过我测试,IE,FF,Opera都没问题。

感谢楼主!
2 楼 la_ka 2010-07-25  
看代码也知道LZ是IE兼容拉。。。
1 楼 dreampuf01 2010-07-22  
以前看过一个..IE only.....这个兼容否?.

相关推荐

    JavaScript获取,设置光标位置,兼容InputTextArea

    在JavaScript编程中,获取和设置光标位置是常见的需求,特别是在与用户交互的表单元素如`&lt;input&gt;`和`&lt;textarea&gt;`中。这涉及到DOM(文档对象模型)操作和事件处理,对于创建动态和响应式的网页应用至关重要。本文将...

    Textarea在光标停留处插入文字

    例如,以下代码可以获取`Textarea`的光标位置: ```javascript var textarea = document.getElementById('myTextarea'); var cursorPos = textarea.selectionStart; ``` 然后,需要监听用户的输入事件,比如`...

    在textarea光标处插入文本

    ### 在Textarea光标处插入...本文详细介绍了如何在`textarea`的光标位置插入文本的方法,包括IE和非IE浏览器的兼容性处理。通过分析提供的代码示例,我们不仅了解了其实现原理,还学习了如何在实际项目中应用这些知识。

    Javascript 获取光标位置

    总的来说,JavaScript获取光标位置是通过访问`input`元素的`selectionStart`和`selectionEnd`属性或使用`window.getSelection()`来实现的。在实际开发中,结合jQuery等库,可以更方便地处理这类需求。对于提供的...

    javascript获得光标所在的文本框(text textarea)中的位置.docx

    通过以上介绍,我们可以了解到在JavaScript中获取光标位置的基本原理和技术细节。这不仅有助于我们更好地理解用户的行为,还能为用户提供更加友好的交互体验。希望本文能帮助你在实际项目中有效地利用这些技术点。

    用javascript获取textarea中的光标位置

    对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到好的办法。昨天我在网上找到了一段javascript代码,本来不想把原版放在这里的,就是...

    获取和设置输入框光标位置的插件

    "获取和设置输入框光标位置的插件"就是这样一个工具,它允许开发者方便地获取或设定文本输入框中的光标位置,从而提升应用的功能性和用户友好性。 首先,我们需要理解光标在输入框中的作用。光标是用户输入时的指示...

    JS获取文本框焦点光标位置、选中起始位置、终止位置、选择内容

    有时,开发者需要获取或操作文本框中的焦点光标位置、选中起始位置、终止位置以及选中的内容,这对于实现诸如高亮显示、文本编辑、格式化等功能至关重要。在本文中,我们将深入探讨这些概念,并提供兼容IE8的解决...

    使用JS在textarea在光标处插入内容

    在IT领域,特别是前端开发中,使用JavaScript在`textarea`元素的光标位置插入内容是一项常见且实用的技术。本文将详细解析如何实现这一功能,并深入理解其背后的逻辑与原理。 ### 核心知识点:在`textarea`光标处...

    jQuery往textarea中光标所在位置插入文本的方法

    本文通过判断浏览器类型和版本,使用不同的方法获取和设置光标位置。 5. 文本操作:在textarea中插入文本时,需要对现有文本进行截取和拼接操作。这需要使用JavaScript字符串的相关方法,如substring()、length等。...

    JavaScript 获取/设置光标位置,兼容InputTextArea

    在JavaScript中,获取和设置光标...以上就是关于JavaScript获取和设置`Input`和`TextArea`元素光标位置的详细解释,包括了兼容性处理的实现。这些方法能够帮助你在各种浏览器环境中控制用户的输入焦点,提升用户体验。

    获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍

    本文将介绍如何在IE、Firefox和Chrome中获取div编辑框、textarea和input text光标位置的方法,并提供相应的代码示例。 首先,了解不同浏览器对于光标位置获取的支持情况是必要的。例如,IE浏览器使用了document....

    JS在TextArea光标位置插入文字并实现移动光标到文字末尾

    在JavaScript中,操作文本输入域,如`&lt;textarea&gt;`,涉及到光标位置的处理时,通常需要使用到浏览器提供的API。对于不同的浏览器,这些API可能会有所差异。在处理`&lt;textarea&gt;`光标位置插入文字并移动光标到文字末尾的...

    jQuery获取和设置文本框光标

    - 若要在文本框内移动光标,可以结合设置光标位置和触发`focus`事件,确保光标移动后依然可见。例如,`$("#myTextBox").focus().setSelectionRange(newPosition, newPosition)`。 6. **插件使用**: - 压缩包中的...

    使用TextRange获取输入框中光标的位置的代码

    获取输入框中的光标位置的整个代码其实很短,只是这些对象和方法不太常用而已。下面是一个使用JavaScript获取输入框中光标的位置的代码: ```javascript function GetCursorPsn(txb) { var slct = document....

    javascript获取以及设置光标位置

    在网页开发中,有时我们需要动态地获取或设置文本输入框中的光标位置,以及获取或选中用户已经选中的文本。本文将介绍如何使用JavaScript来实现这些功能。 首先,我们来看看如何获取光标的位置。可以通过一个名为...

    vue结合html实时截取textarea文本

    这个简单的Vue与HTML结合的示例展示了如何在用户输入时实时获取textarea中的选中文本和光标位置。在实际项目中,你可以根据需求扩展这个功能,比如增加字符计数、格式检查或其他高级功能。通过Vue.js的强大功能和...

    JS获取文本框光标位置、选中起始位置、终止位置、选择内容

    特别是在交互式应用中,我们经常需要获取或设置用户输入时的光标位置、选中文字的起始和终止位置,以及获取选中的文字内容。这些功能可以帮助我们实现更丰富的用户交互体验,比如自动补全、高亮显示等。以下是对这些...

    JavaScript 获取/设置光标位置,兼容Input&amp;&amp;TextArea

    本文将深入探讨如何用JavaScript获取和设置Input和TextArea元素中的光标位置,并提供兼容性处理的方法。 在获取Input或TextArea元素光标位置时,我们需要区分对待IE浏览器和其他现代浏览器。IE浏览器通过document....

Global site tag (gtag.js) - Google Analytics