今天工作中遇到了光标的位置问题。
我们在上一些SNS网站时,如果我们给某人留言,那么点击‘回复’,光标的位置会自动移动到‘回复×××:’的后面。这是一个很人性化的设计,可是却难道了我,因为在这方面我了解得很少,所以今天收集了一些详细的资料,整理了一下。如下:
- <script language="javascript">
- function test()
- {
- var rng=document.body.createTextRange();
- alert(rng.text)
- }
- function test1()
- {
- var rng=document.body.createTextRange();
- alert(rng.htmlText)
- }
- </script>
- <input type="button" onclick="test()" value="text">
- <input type="button" onclick="test1()" value="htmlText">
- 获取指定文本框中的选中的文字:只响应第一个文本框
- <input id="inp1" type="text" value="1234567890">
- <input id="inp2" type="text" value="9876543210">
- <input type="button" onclick="test()" value="确定">
- <script language="javascript">
- function test()
- {
- var o=document.getElementById("inp1")
- var r = document.selection.createRange();
- if(o.createTextRange().inRange(r))
- alert(r.text);
- }
- </script>
- 页面文本倒序查找
- abababababababa
- <input value="倒序查找a" onclick=myfindtext("a") type="button">
- <script language ='javascript'>
- var rng = document.body.createTextRange();
- function myfindtext(text)
- {
- rng.collapse(false);
- if(rng.findText(text,-1,1))
- {
- rng.select();
- rng.collapse(true);
- }else
- {alert("end");}
- }
- </script>
- 聚焦控件后把光标放到最后
- <script language="javascript">
- function setFocus()
- {
- var obj = event.srcElement;
- var txt =obj.createTextRange();
- txt.moveStart('character',obj.value.length);
- txt.collapse(true);
- txt.select();
- }
- </script>
- <input type="text" value="http://toto369.net" onfocus="setFocus()">
- 得到文本框内光标位置
- <script language="javascript">
- function getPos(obj){
- obj.focus();
- var s=document.selection.createRange();
- s.setEndPoint("StartToStart",obj.createTextRange())
- alert(s.text.length);
- }
- </script>
- <input type="text" id="txt1" value="1234567890">
- <input type="button" value="得到光标位置" onclick=getPos(txt1)>
- 控制input框内光标位置
- <script language="javascript">
- function setPos(num)
- {
- text1.focus();
- var e =document.getElementById("text5");
- var r =e.createTextRange();
- r.moveStart('character',num);
- r.collapse(true);
- r.select();
- }
- </script>
- <input type="text" id="text5" value="1234567890">
- <select onchange="setPos(this.selectedIndex)">
- <option value="0">0</option>
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- <option value="5">5</option>
- <option value="6">6</option>
- <option value="7">7</option>
- </select>
- 选中文本框中的一段文字
- <script language=javascript>
- function sel(obj,num)
- {
- var rng=obj.createTextRange()
- var sel = rng.duplicate();
- sel.moveStart("character", num);
- sel.setEndPoint("EndToStart", rng);
- sel.select();
- }
- </script>
- <input type="text" id="text1" value="1234567890">
- <select onchange="sel(text1,this.value)">
- <option value="0">0</option>
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- <option value="5">5</option>
- <option value="6">6</option>
- <option value="7">7</option>
- </select>
- 控制文本框内光标的移动
- <input type="button" value="<" onclick=go(-1)>
- <input id="demo" value="这里是文字">
- <input type="button" value=">" onclick=go(1)>
- <script language="javascript">
- function go(n){
- demo.focus();
- with(document.selection.createRange())
- {
- moveStart("character",n);
- collapse();
- select();
- }
- }
- </script>
- 今天又查了一些资料,在firefox下要移动光标的位置更简单,它调
- 用了document对象的setSelectionRange(first,second)方法,顾名
- 思义,first是选中文本的起点,second选中文本的终点(是一个长
- 度值)。如果两个参数是一样的,就把光标移动到参数指定的位
- 置,别忘了末了要调用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"后把焦点归还给了浏览器而不是某一个输入框,所以要先定位后实现逻辑。