技术分享 Javascript如何获取textarea中光标位置
创始人
2024-07-15 16:30:32
0

这里和大家分享一下如何用Javascript获取textarea中的光标位置,相信本文介绍一定会让你有所收获的。

用Javascript获取textarea中的光标位置

Javascript一向以他的灵活随意而著称,这也使得它的功能可以非常的强大,而由于没有比较好的调试工具,又使得它使用起来困难重重,尤其使对于一些初学者,更是感觉到无从下手。今天探讨的问题是用javascript获取textarea中光标的位置。对于写javascript写网页编辑器的人来说,获取textarea中的光标位置是一个非常重要的问题,而往往很多人在这个地方不知所措,找不到好的办法。昨天我在网上找到了一段javascript代码,本来不想把原版放在这里的,就是因为太精彩了,怕我给改坏了,所以还是原版放在这里吧。

  1. varstart=0;  
  2. varend=0;  
  3. functionadd(){  
  4. vartextBox=document.getElementById("ta");  
  5. varpre=textBox.value.substr(0,start);  
  6. varpost=textBox.value.substr(end);  
  7. textBox.value=pre+document.
  8. getElementById("inputtext").value+post;  
  9. }  
  10. functionsavePos(textBox){  
  11. //如果是Firefox(1.5)的话,方法很简单  
  12. if(typeof(textBox.selectionStart)=="number"){  
  13. start=textBox.selectionStart;  
  14. end=textBox.selectionEnd;  
  15. }  
  16. //下面是IE(6.0)的方法,麻烦得很,还要计算上'\n'  
  17. elseif(document.selection){  
  18. varrange=document.selection.createRange();  
  19. if(range.parentElement().id==textBox.id){  
  20. //createaselectionofthewholetextarea  
  21. varrange_all=document.body.createTextRange();  
  22. range_all.moveToElementText(textBox);  
  23. //两个range,一个是已经选择的text(range),  
  24. 一个是整个textarea(range_all)  
  25. //range_all.compareEndPoints()比较两个端点,  
  26. 如果range_all比range更往左(furthertotheleft),  
  27. 则//返回小于0的值,则range_all往右移一点,直到两个range的start相同。  
  28. //calculateselectionstartpointbymoving
  29. beginningofrange_alltobeginningofrange  
  30. for(start=0;range_all.compareEndPoints
  31. ("StartToStart",range)<0;start++)range_all.moveStart('character',1);  
  32. //getnumberoflinebreaksfromtextareastarttose
  33. lectionstartandaddthemtostart  
  34. //计算一下\n  
  35. for(vari=0;i<=start;i++){  
  36. if(textBox.value.charAt(i)=='\n')  
  37. start++;  
  38. }  
  39. //createaselectionofthewholetextarea  
  40. varrange_all=document.body.createTextRange();  
  41. range_all.moveToElementText(textBox);  
  42. //calculateselectionendpointbymovingbeginningofrange_alltoendofrange  
  43. for(end=0;range_all.compareEndPoints('StartToEnd',range)<0;end++)  
  44. range_all.moveStart('character',1);  
  45. //getnumberoflinebreaksfromtextareastarttoselectionendandaddthemtoend  
  46. for(vari=0;i<=end;i++){  
  47. if(textBox.value.charAt(i)=='\n')  
  48. end++;  
  49. }  
  50. }  
  51. }  
  52. document.getElementById("start").value=start;  
  53. document.getElementById("end").value=end;  
  54. }  
  55.  

 下面是在页面中调用js代码的方法:

  1.  
  2. cellspacing="0"cellpadding="0"> 
  3.  
  4. start:
  5. id="start"size="3"/> 
  6. end:
  7. id="end"size="3"/> 
  8.  
  9.  
  10.  
  11. onKeyup="savePos(this)" 
  12. onmousedown="savePos(this)" 
  13. onmouseup="savePos(this)" 
  14. onfocus="savePos(this)" 
  15. rows="14"cols="50"> 
  16.  
  17.  
  18.  
  19. id="inputtext"/> 
  20. onClick="add()"value="AddText"/> 
  21.  
  22.  
  23.  

【编辑推荐】

  1. Javascript解决浏览器兼容问题12个技巧
  2. JS中Array数组的三大属性用法揭秘
  3. 解析Javascript对select下拉列表操作
  4. 技术分享 如何识别控制DHTML和JS中的页面元素
  5. 深入学习JavaScript中Function对象语法 

 

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...