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文本内容了