用Javascript在编辑框和TextArea的光标处插入文字

本文提供了用Javascript在input type="text"和TextArea的光标处插入字符串的例子。
Javascript代码如下:
  1. <html>
  2.  <head>
  3.  <title>Test of inserting characters at cursor position</title>
  4.  <script type="text/javascript" src="jquery.pack.js"></script>
  5.  <script>
  6. function setCaret(textObj){
  7.    if(textObj.createTextRange){  
  8.      textObj.caretPos=document.selection.createRange().duplicate();  
  9.    }
  10. }
  11. function insertAtCaret(textObj,textFeildValue){
  12.    if(document.all&&textObj.createTextRange&&textObj.caretPos){     
  13.        var caretPos=textObj.caretPos;    
  14.        caretPos.text=caretPos.text.charAt(caretPos.text.length-1)==''?textFeildValue+'':textFeildValue;
  15.    }else if(textObj.setSelectionRange){      
  16.        var rangeStart=textObj.selectionStart;
  17.        var rangeEnd=textObj.selectionEnd;   
  18.        var tempStr1=textObj.value.substring(0,rangeStart);    
  19.        var tempStr2=textObj.value.substring(rangeEnd);    
  20.        textObj.value=tempStr1+textFeildValue+tempStr2;
  21.        textObj.focus();
  22.        var len=textFeildValue.length;
  23.        textObj.setSelectionRange(rangeStart+len,rangeStart+len);
  24.        textObj.blur();
  25.    }else {
  26.      textObj.value+=textFeildValue;
  27.    }
  28. }
  29. $(document).ready(function(){
  30.     if($.browser.msie){
  31.       $("#tag")
  32.         .click(function(){
  33.           setCaret($(this).get(0));
  34.         })
  35.         .select(function(){
  36.           setCaret($(this).get(0));
  37.         })
  38.         .keyup(function(){
  39.           setCaret($(this).get(0));
  40.         });
  41.         $("#tagA")
  42.         .click(function(){
  43.           setCaret($(this).get(0));
  44.         })
  45.         .select(function(){
  46.           setCaret($(this).get(0));
  47.         })
  48.         .keyup(function(){
  49.           setCaret($(this).get(0));
  50.         });
  51.     }
  52.     $("a.insertTag")
  53.       .click(function(){
  54.         insertAtCaret($("#tag").get(0),$(this).html());
  55.       });
  56.      $("a.insertTagA")
  57.       .click(function(){
  58.         insertAtCaret($("#tagA").get(0),$(this).html());
  59.       });
  60.   });
  61.  </script>
  62.  </head>
  63.  <body>
  64. References:<br/>
  65. http://www.dnew.cn/post/287.htm<br/>
  66. http://blog.vishalon.net/Post/57.aspx
  67.    <div>
  68.      <form>
  69.      <input type="text" id="tag" value="testtesttest" size="50" /><br/>
  70.      <a class="insertTag" href="javascript:void(0)">tag1</a>
  71.      <a class="insertTag" href="javascript:void(0)">tag2</a>
  72.      <br/>
  73.      <textarea id="tagA" style="width:300px;height:120px;" >tttttt tttt</textarea><br/>
  74.      <a class="insertTagA" href="javascript:void(0)">tag3</a>
  75.      <a class="insertTagA" href="javascript:void(0)">tag4</a>
  76.      </form>
  77.    
  78.    </div>
  79.  </body>
  80.  </html>

本代码在IE6.0和Firefox2.0下测试通过,与参考链接的文章相比主要是加进了JQuery并改进了在firefox下不能在同一位置连续插入的问题。
直接下载例子下载文件InsertAtCursorPos.rar (15 KB , 下载:1082次)
参考链接:
http://www.dnew.cn/post/287.htm
http://blog.vishalon.net/Post/57.aspx
标签: Javascript
评论: 4 | 引用: 0 | 阅读: 4379
  • 1 
dnew.cn [ 2008-02-01 19:26 网址 | 回复 | 编辑 删除 ]
不错
心远 [ 2009-02-11 15:08 网址 | 回复 | 编辑 删除 ]
谢谢,对我非常有用
yyy [ 2010-04-22 14:03 | 回复 | 编辑 删除 ]
u
真哥 [ 2010-05-02 20:04 | 回复 | 编辑 删除 ]
先看看
  • 1 
发表评论
昵 称: (必须)
密 码: (未注册用户可不填)
网 址: 邮 箱:
验证码: 验证码图片 选 项:
头 像:
内 容: