首页 > 代码库 > 深入理解表单脚本系列第三篇——选择文本

深入理解表单脚本系列第三篇——选择文本

×
目录
[1]select() [2]select事件 [3]setSelectionRange()

前面的话

  表单是最早用来与用户交互的工具,具有丰富的控件和属性。基本上,它们通过各种控件和属性就可以解决大部分问题。但还有一些问题还是需要表单脚本来实现的,比如本文将要说到的选择文本

 

select()

  select()方法用于选择文本框(指type为text的input元素和textarea元素)中的所有文本,该方法不接受参数,且无返回值

<input id="text" value="123"><button id="btn">选择文本</button><script>btn.onclick = function(){    text.select();}</script>

<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/5yhmcipn" frameborder="0" width="320" height="240"></iframe>

select事件

  与select()方法对应的,是一个select事件。在选择了文本框中的文本时,就会触发select事件

  不过关于什么时间触发select事件有分歧。IE8-浏览器中,只要用鼠标选择了一个字符,未释放鼠标前,就可以触发select事件;而其他浏览器中,要释放鼠标才会触发

<input id="text" value="123"><script>text.onselect = function(){    this.style.backgroundColor = pink;}</script>

<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/hw4vcr47" frameborder="0" width="320" height="240"></iframe>

setSelectionRange()

  setSelectionRange()方法用于选择文本框中的部分文本,这个方法接收两个参数:要选择的第一个字符的索引和要选择的最后一个字符之后的字符的索引(类似于substring()方法的两个参数)

  firefox浏览器使用该方法,可以选择文本,但却没有获取焦点;而其他浏览器使用该方法可以自动获取焦点

  [注意]IE8-浏览器不支持

<input id="text" value="1234567890"><button id="btn">选择前3个字符</button><script>btn.onclick = function(){    text.focus();    text.setSelectionRange(0,3)    }</script>

<iframe style="width: 100%; height: 50px;" src="http://sandbox.runjs.cn/show/exi8xjyh" frameborder="0" width="320" height="240"></iframe>

  IE8-浏览器支持使用范围选择部分文本。要选择文本框中的部分文本,必须首先使用createTextRange()方法创建一个范围,并将其放在恰当的位置上。然后,再使用moveStart()和moveEnd()这两个范围方法将范围移动到位

  不过,在调用这两个方法以前,还必须使用collapse()将范围折叠到文本框的开始位置。此时,moveStart()将范围的起点和终点移动到了相同的位置,只要再给moveEnd()传入要选择的字符总数即可。最后一步,就是使用范围的select()方法选择文本

<input id="text" value="1234567890"><button id="btn">选择前3个字符</button><script>btn.onclick = function(){    var range = text.createTextRange();    range.collapse(true);    range.moveStart(character,0);    range.moveEnd(character,3);    range.select();}</script>

兼容 

function selectText(textbox, startIndex, stopIndex){    if(textbox.setSelectionRange){        textbox.setSelectionRange(startIndex, stopIndex);    } else if(textbox.createTextRange){        var range = textbox.createTextRange();        range.collapse(true);        range.moveStart(‘character‘,startIndex);        range.moveEnd(‘character‘,stopIndex);        range.select();    }    textbox.focus();}
<script type="text/javascript">// 0){ return; } if(select[i].getBoundingClientRect().top <= 0 && select[i+1]){ if(select[i+1].getBoundingClientRect().top > 0){ change(oCon.children[i+2]) } }else{ change(oCon.children[select.length+1]) } }}document.body.onmousewheel = wheel;document.body.addEventListener(‘DOMMouseScroll‘,wheel,false);var oCon = document.getElementById("content");var close = oCon.getElementsByTagName(‘span‘)[0];close.onclick = function(){ if(this.innerHTML == ‘显示目录‘){ this.innerHTML = ‘ב; this.style.background = ‘‘; oCon.style.border = ‘2px solid #ccc‘; oCon.style.width = ‘‘; oCon.style.height = ‘‘; oCon.style.overflow = ‘‘; oCon.style.lineHeight = ‘30px‘; }else{ this.innerHTML = ‘显示目录‘; this.style.background = ‘#3399ff‘; oCon.style.border = ‘none‘; oCon.style.width = ‘60px‘; oCon.style.height = ‘30px‘; oCon.style.overflow = ‘hidden‘; oCon.style.lineHeight = ‘‘; }}for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].onmouseover = function(){ this.style.color = ‘#3399ff‘; } oCon.children[i].onmouseout = function(){ this.style.color = ‘inherit‘; if(this.mark){ this.style.color = ‘#3399ff‘; } } oCon.children[i].onclick = function(){ change(this); } }function change(_this){ for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].mark = false; oCon.children[i].style.color = ‘inherit‘; oCon.children[i].style.textDecoration = ‘none‘; oCon.children[i].style.borderColor = ‘transparent‘; } _this.mark = true; _this.style.color = ‘#3399ff‘; _this.style.textDecoration = ‘underline‘; _this.style.borderColor = ‘#2175bc‘; }// ]]></script>

深入理解表单脚本系列第三篇——选择文本