1. setCaretPos(element, pos)就是将光标设置在element元素的pos位置
2. 键盘监听
a, 获取当前光标位置
b, 将当前位置后面的那个 _ 去掉(这里面要取原文本, 然后处理, 然后结果写到textarea中, 注意, 此时textarea的光标在最后位置, 所以又第三步)
c, 将光标定位到原当前位置
然后键盘输入自然会在光标的后面位置, 也就是实现了insert功能
我在firefox, ie9下测试通过, 使用了jquery去取dom元素, 如果没
关于JS获取与设置文本框、文本域光标位置//获取光标所在文本框的位置
function getCaret(textbox) {
var control = document.activeElement
textbox.focus()
var rang = document.selection.createRange()
rang.setEndPoint(“StartToStart”,textbox.createTextRange())
control.focus()
alert(rang.text.length)
}
//获取光标所在文本域的位置
function getCaretForTextArea(ZysrID){
var txb = document.getElementById(ZysrID)//根据ID获得对象
var pos = 0//设置初始位置
txb.focus()//输入框获得焦点,这句也不能少,不然后面会出错,血的教训啦.
var s = txb.scrollTop//获得滚动条的位置
var r = document.selection.createRange()//创建文档选择对象
var t = txb.createTextRange()//创建输入框文本对象
t.collapse(true)//将光标移到头
t.select()//显示光标,这个不能少,不然的话,光标没有移到头.当时我不知道,搞了十几分钟
var j = document.selection.createRange()//为新的光标位置创建文档选择对象
r.setEndPoint(“StartToStart”,j)//在以前的文档选择对象和新的对象之间创建对象,妈的,不好解释,我表达能力不算太好.有兴趣自己去看msdn的资料
var str = r.text//获得对象的文本
var re = new RegExp(“[//n]“,”g”)//过滤掉换行符,不然你的文字会有问题,会比你的文字实际长度要长一些.搞死我了.我说我得到的数字怎么总比我的实际长度要长.
str = str.replace(re,”")//过滤
pos = str.length//获得长度.也就是光标的位置
alert(pos)
r.collapse(false)
r.select()//把光标恢复到以前的位置
txb.scrollTop = s//把滚动条恢复到以前的位置
}
//设置光标在文本框中的位置
function setCaret(id,pos){
var textbox = document.all(id)
var r = textbox.createTextRange()
r.collapse(true)
r.moveStart(‘character’,pos)
r.select()
}
//设置光标位置的调用函数
function readyforset(id){
var pos = document.getElementById(‘setpos’).value
setCaret(id,pos)
}
if(!-[1,])//如果是IE
{
var p=getCursortPosition(obj)
}
if(p>0)
{
setCaretPosition(obj,p)
}