首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

ie中js获取textarea光标位置

作者:  时间: 2011-06-17

网上一搜一大票,但在使用中发现一些问题,以下所有内容只在ie8中测试过

<textarea id="t2">123</textarea>

方法1:

var srng = document.selection.createRange();
srng.moveStart('character', -t2.value.length);

使用这种方法把srng的其实位置移到t2的开始位置,咋一看这语句有问题,如果光标不在t2的文本的末尾,那不就移动多了嘛,其实是不会的,但是,也会出一些问题,如果光标不是在最后一个或倒数第二个字符的后面处,则srng.text的值为" "加上t2中光标以前的文本,如光标在2和3之间,则得到的srng.text为" 12",前面多了个空格,所以得到的结果也可能有错

方法2:

var rng = t2.createTextRange();
var srng = document.selection.createRange();
srng.setEndPoint("StartToStart", rng);

这个方法好,不会像方法1那样多个空格了,杯具的是,在ie8中setEndPoint会抛出参数无效的异常,如果是input则是可以的,textarea就不行

方法3:

var rng = document.body.createTextRange();
rng.moveToElementText(t2);

var srng = document.selection.createRange();
srng.setEndPoint("StartToStart", rng);

这个方法就可以了,不会抛出异常,也不会多个空格出来

其实这3个方法的思路就是:document.selection.createRange()得到的range的其实位置都在光标处,把这个range的开始位置移动到textarea的文本开始处,则这个range的内容就是光标一起的textarea文本内容了