从光标焦点位置产生的联想

       今天工作中遇到了光标的位置问题。

       我们在上一些SNS网站时,如果我们给某人留言,那么点击‘回复’,光标的位置会自动移动到‘回复×××:’的后面。这是一个很人性化的设计,可是却难道了我,因为在这方面我了解得很少,所以今天收集了一些详细的资料,整理了一下。如下:

 

        

  1. <script language="javascript">
  2. function test()
  3. {
  4. var rng=document.body.createTextRange();
  5. alert(rng.text)
  6. }
  7. function test1()
  8. {
  9. var rng=document.body.createTextRange();
  10. alert(rng.htmlText)
  11. }
  12. </script>
  13. <input type="button" onclick="test()" value="text">
  14. <input type="button" onclick="test1()" value="htmlText">
  15. 获取指定文本框中的选中的文字:只响应第一个文本框
  16. <input id="inp1" type="text" value="1234567890">
  17. <input id="inp2" type="text" value="9876543210">
  18. <input type="button" onclick="test()" value="确定">
  19. <script language="javascript">
  20. function test()
  21. {
  22. var o=document.getElementById("inp1")
  23. var r = document.selection.createRange();
  24. if(o.createTextRange().inRange(r))
  25. alert(r.text);
  26. }
  27. </script>
  28. 页面文本倒序查找
  29. abababababababa
  30. <input value="倒序查找a" onclick=myfindtext("a") type="button">
  31. <script language ='javascript'>
  32. var rng = document.body.createTextRange();
  33. function myfindtext(text)
  34. {
  35. rng.collapse(false);
  36. if(rng.findText(text,-1,1))
  37. {
  38. rng.select();
  39. rng.collapse(true);
  40. }else
  41. {alert("end");}
  42. }
  43. </script>
  44. 聚焦控件后把光标放到最后
  45. <script language="javascript">
  46. function setFocus()
  47. {
  48. var obj = event.srcElement;
  49. var txt =obj.createTextRange();
  50. txt.moveStart('character',obj.value.length);
  51. txt.collapse(true);
  52. txt.select();
  53. }
  54. </script>
  55. <input type="text" value="http://toto369.net" onfocus="setFocus()">
  56. 得到文本框内光标位置
  57. <script language="javascript">
  58. function getPos(obj){
  59. obj.focus();
  60. var s=document.selection.createRange();
  61. s.setEndPoint("StartToStart",obj.createTextRange())
  62. alert(s.text.length);
  63. }
  64. </script>
  65. <input type="text" id="txt1" value="1234567890">
  66. <input type="button" value="得到光标位置" onclick=getPos(txt1)>
  67. 控制input框内光标位置
  68. <script language="javascript">
  69. function setPos(num)
  70. {
  71. text1.focus();
  72. var e =document.getElementById("text5");
  73. var r =e.createTextRange();
  74. r.moveStart('character',num);
  75. r.collapse(true);
  76. r.select();
  77. }
  78. </script>
  79. <input type="text" id="text5" value="1234567890">
  80. <select onchange="setPos(this.selectedIndex)">
  81. <option value="0">0</option>
  82. <option value="1">1</option>
  83. <option value="2">2</option>
  84. <option value="3">3</option>
  85. <option value="4">4</option>
  86. <option value="5">5</option>
  87. <option value="6">6</option>
  88. <option value="7">7</option>
  89. </select>
  90. 选中文本框中的一段文字
  91. <script language=javascript>
  92. function sel(obj,num)
  93. {
  94. var rng=obj.createTextRange()
  95. var sel = rng.duplicate();
  96. sel.moveStart("character", num);
  97. sel.setEndPoint("EndToStart", rng);
  98. sel.select();
  99. }
  100. </script>
  101. <input type="text" id="text1" value="1234567890">
  102. <select onchange="sel(text1,this.value)">
  103. <option value="0">0</option>
  104. <option value="1">1</option>
  105. <option value="2">2</option>
  106. <option value="3">3</option>
  107. <option value="4">4</option>
  108. <option value="5">5</option>
  109. <option value="6">6</option>
  110. <option value="7">7</option>
  111. </select>
  112. 控制文本框内光标的移动
  113. <input type="button" value="<" onclick=go(-1)>
  114. <input id="demo" value="这里是文字">
  115. <input type="button" value=">" onclick=go(1)>
  116. <script language="javascript">
  117. function go(n){
  118. demo.focus();
  119. with(document.selection.createRange())
  120. {
  121. moveStart("character",n);
  122. collapse();
  123. select();
  124. }
  125. }
  126. </script>
  127.  
  128. 今天又查了一些资料,在firefox下要移动光标的位置更简单,它调
  129. 用了document对象的setSelectionRange(first,second)方法,顾名
  130. 思义,first是选中文本的起点,second选中文本的终点(是一个长
  131. 度值)。如果两个参数是一样的,就把光标移动到参数指定的位
  132. 置,别忘了末了要调用focus()显示焦点。

              不幸的是在firefox下如果调用这些函数前有一个屏幕的定位(比如说<a href="#input" οnclick="show()"></a>),再去调用show()来完成我们的逻辑代码。无论是选中文本还是获取焦点都会一闪而过,怎样完善它呢?让我再想想。

                解决方法就是<a href="#" οnclick="show();return false"></a>。不要再锚中定位,在show()中定位:window.location = "#input",这样就可以避免了firefox下的问题!哎,真不知道浏览器怎么实现这个机制的,我认为firefox 在实现window.location = "#input"后把焦点归还给了浏览器而不是某一个输入框,所以要先定位后实现逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值