用javascript获取textarea中的光标位置_Javascript教程-查字典教程网
用javascript获取textarea中的光标位置
用javascript获取textarea中的光标位置
发布时间:2016-12-30 来源:查字典编辑
摘要:对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到...

对于写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也快出来了,浏览器之间又会掀起一场你死我活的争斗,而这种争斗可以使浏览器的解析标准会越来越规范,我们写代码也会越来越省事,这实在是一件值得高兴的事。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类