用javascript获取textarea中的光标位置

时间:2021-05-18

对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到好的办法。昨天我在网上找到了一段javascript代码,本来不想把原版放在这里的,就是因为太精彩了,怕我给改坏了,所以还是原版放在这里吧。

varstart=0;
varend=0;
functionadd(){
vartextBox=document.getElementById("ta");
varpre=textBox.value.substr(0,start);
varpost=textBox.value.substr(end);
textBox.value=pre+document.getElementById("inputtext").value+post;
}
functionsavePos(textBox){
//如果是Firefox(1.5)的话,方法很简单
if(typeof(textBox.selectionStart)=="number"){
start=textBox.selectionStart;
end=textBox.selectionEnd;
}
//下面是IE(6.0)的方法,麻烦得很,还要计算上'\n'
elseif(document.selection){
varrange=document.selection.createRange();
if(range.parentElement().id==textBox.id){
//createaselectionofthewholetextarea
varrange_all=document.body.createTextRange();
range_all.moveToElementText(textBox);
//两个range,一个是已经选择的text(range),一个是整个textarea(range_all)
//range_all.compareEndPoints()比较两个端点,如果range_all比range更往左(furthertotheleft),则//返回小于0的值,则range_all往右移一点,直到两个range的start相同。
//calculateselectionstartpointbymovingbeginningofrange_alltobeginningofrange
for(start=0;range_all.compareEndPoints("StartToStart",range)<0;start++)
range_all.moveStart('character',1);
//getnumberoflinebreaksfromtextareastarttoselectionstartandaddthemtostart
//计算一下\n
for(vari=0;i<=start;i++){
if(textBox.value.charAt(i)=='\n')
start++;
}
//createaselectionofthewholetextarea
varrange_all=document.body.createTextRange();
range_all.moveToElementText(textBox);
//calculateselectionendpointbymovingbeginningofrange_alltoendofrange
for(end=0;range_all.compareEndPoints('StartToEnd',range)<0;end++)
range_all.moveStart('character',1);
//getnumberoflinebreaksfromtextareastarttoselectionendandaddthemtoend
for(vari=0;i<=end;i++){
if(textBox.value.charAt(i)=='\n')
end++;
}
}
}
document.getElementById("start").value=start;
document.getElementById("end").value=end;
}
下面是在页面中调用js代码的方法:

<formaction="a.cgi">
<tableborder="1"cellspacing="0"cellpadding="0">
<tr>
<td>start:<inputtype="text"id="start"size="3"/></td>
<td>end:<inputtype="text"id="end"size="3"/></td>
</tr>
<tr>
<tdcolspan="2">
<textareaid="ta"onKeydown="savePos(this)"
onKeyup="savePos(this)"
onmousedown="savePos(this)"
onmouseup="savePos(this)"
onfocus="savePos(this)"
rows="14"cols="50"></textarea>
</td>
</tr>
<tr>
<td><inputtype="text"id="inputtext"/></td>
<td><inputtype="button"onClick="add()"value="AddText"/></td>
</tr>
</table>
</form>
此代码的原文是:http://blog.csdn.net/liujin4049/archive/2006/09/19/1244065.aspx,在此谢过!

这段js代码同时支持IE和Firefox,甚是精彩,可见此人js功力深厚啊,呵呵。

Btw:听说Firefox现在的市场占有率已经达到17%了,而IE8也快出来了,浏览器之间又会掀起一场你死我活的争斗,而这种争斗可以使浏览器的解析标准会越来越规范,我们写代码也会越来越省事,这实在是一件值得高兴的事。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章