百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> javascript 获取Textarea 元素的光标位置代码(1/2)
分享文章到:

javascript 获取Textarea 元素的光标位置代码(1/2)

发布时间:01/15 来源: 浏览: 关键词:

<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>demo : textarea 元素的光标位置</title>
<style>
#result {
    font-size:18px;
    line-height:25px;
    padding-left:20px;
}
</style>
</head>

<body>

<h1>textarea 元素的光标位置</h1>
<ul>
 <li>获取 textarea 元素当前的光标位置</li>
    <li>设置回原先的 textarea 元素的光标位置</li>
    <li>在 textarea 元素的光标位置插入文本</li>
</ul>

<form action="#">
    <textarea id="test" rows="8" cols="50"></textarea>
    <p>
        <input type="button" id="get" value="get cursor position"/>
        <input type="button" id="set" value="set cursor position"/>
        <input type="button" id="add" value="add text after cursor position"/>
    </p>
</form>

<h2>textarea range:</h2>
<div id="result"></div>

<script type="text/javascript">

/**
 * cursorposition object
 *
 * created by blank zheng on 2010/11/12.
 * copyright (c) 2010 planabc.net. all rights reserved.
 *
 * the copyrights embodied in the content of this file are licensed under the bsd (revised) open source license.
 */
 
var cursorposition = {
 get: function (textarea) {
  var rangedata = {text: "", start: 0, end: 0 };
 
  if (textarea.setselectionrange) { // w3c 
   textarea.focus();
   rangedata.start= textarea.selectionstart;
   rangedata.end = textarea.selectionend;
   rangedata.text = (rangedata.start != rangedata.end) ? textarea.value.substring(rangedata.start, rangedata.end): "";
  } else if (document.selection) { // ie
   textarea.focus();
   var i,
    os = document.selection.createrange(),
    // don't: or = textarea.createtextrange()
    or = document.body.createtextrange();
   or.movetoelementtext(textarea);
   
   rangedata.text = os.text;
   rangedata.bookmark = os.getbookmark();
   
   // object.movestart(sunit [, icount])
   // return value: integer that returns the number of units moved.
   for (i = 0; or.compareendpoints('starttostart', os) < 0 && os.movestart("character", -1) !== 0; i ++) {
    // why? you can alert(textarea.value.length)
    if (textarea.value.charat(i) == 'n') {
     i ++;
    }
   }
   rangedata.start = i;
   rangedata.end = rangedata.text.length + rangedata.start;
   
   if(!rangedata.text) {
    
   }
  }
  
  return rangedata;
 },
 
 set: function (textarea, rangedata) {
  var or;
  if(!rangedata) {
   alert("you must get cursor position first.")
  }
  textarea.focus();
  if (textarea.setselectionrange) { // w3c
   textarea.setselectionrange(rangedata.start, rangedata.end);
  } else if (textarea.createtextrange) { // ie
   or = textarea.createtextrange();
   
   /*// fixbug : ues movetobookmark()
   // in ie, if cursor position at the end of textarea, the setcursorposition function don't work
   if(textarea.value.length === rangedata.start) {
    or.collaps教程e(false)
    or.select();
   } else {
    or.movetobookmark(rangedata.bookmark);
    or.select();
   }*/
   or.movestart('character', rangedata.start);
   or.moveend('character', rangedata.end - textarea.value.length);
   or.select();
  }
 },

 add: function (textarea, rangedata, text) {
  var ovalue, nvalue, or, sr, nstart, nend, st;
  this.set(textarea, rangedata);
  
  if (textarea.setselectionrange) { // w3c
   ovalue = textarea.value;
   nvalue = ovalue.substring(0, rangedata.start) + text + ovalue.substring(rangedata.end);
   nstart = nend = rangedata.start + text.length;
   st = textarea.scrolltop;
   textarea.value = nvalue;
   // fixbug:
   // after textarea.values = nvalue, scrolltop value to 0
   if(textarea.scrolltop != st) {
    textarea.scrolltop = st;
   }
   textarea.setselectionrange(nstart, nend);
  } else if (textarea.createtextrange) { // ie
   sr = document.selection.createrange();
   sr.text = text;
   sr.setendpoint('starttoend', sr);
   sr.select();
  }
 }
}


var tx=document.getelementbyid("test"),
 re=document.getelementbyid("result"),
 pos;

document.getelementbyid("get").onclick = function(){
 //alert(tx.value.length);
 pos = cursorposition.get(tx);
 re.innerhtml=("<strong>range :</strong> (" + pos.start + ", " + pos.end + ")<br /><strong>text :</strong> " + (!pos.text ? '//--': pos.text));
}

document.getelementbyid("set").onclick = function(){
 cursorposition.set(tx, pos);
}

document.getelementbyid("add").onclick = function(){
 cursorposition.add(tx, pos, input = prompt("你想插入替换的文本:",""));
}
</script>

</body>
</html>

 

首页 1 2 末页
打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有3人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板