在Web页面中控制其元素的选择状态

    为了在Web页面上使用文本搜索,在文本框内实现选择效果,在页面上屏蔽选择状态等。我们需要使用脚本(如JavaScript)来精确的控制页面中UI元素的选择状态。下面从操作元素选择区和屏蔽元素被选择两个方面来说一说。

    操作元素选择区,我们可以使用对应对象的select()方法选择页面内容,其中包括INPUT元素中的内容、TextRange对象中的文字和controlRange Collection对象中的控件。

    1、 Select Input 

None.gif < input  id ="txb"  type ="text"  value ="Text Box" />  
None.gif
< href ="#"  onclick ="document.getElementById('txb').select()" > Select </ a >

    2、 this is a span.      Select Text

None.gif < span  id ="spn" > this is a span. </ span >
None.gif
< href ="#"  onclick ="SelectText();" > Select </ a >
ExpandedBlockStart.gifContractedBlock.gif
< script  language ="javascript" > dot.gif
InBlock.gif
function SelectText()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif    
var range = document.body.createTextRange();
InBlock.gif    range.findText(
"this is a span.");
InBlock.gif    range.select();
ExpandedBlockEnd.gif}

None.gif
</ script >

    3、selectselect   Select Control

None.gif < select  id ="slt1" > < option > select </ option > </ select >
None.gif
< select  id ="slt2" > < option > select </ option >< / select >
None.gif
< href ="#"  onclick ="SelectControl();" > Select </ a > None.gif
ExpandedBlockStart.gifContractedBlock.gif
< script  language ="javascript" > dot.gif
InBlock.gif
function SelectControl()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif    
var controlRange = document.body.createControlRange();
InBlock.gif    controlRange.add(document.getElementById('slt1'));
InBlock.gif    controlRange.add(document.getElementById('slt2'));
InBlock.gif    controlRange.select();
ExpandedBlockEnd.gif}

None.gif
</ script >

    上面是主动操作页面元素的选择状态,下面说说怎么屏蔽页面中的选中状态。

    在IE5.5及以上版本中,我们可以使用这两种方便的方法来屏蔽对元素的选择。一是使用元素的属性unselectable,另一种方法是使用元素的事件onselectstart。比如我们让一个span内的文字不能不选择,我们可以使用:
None.gif < span  unselectable ="on" > 这是一段不能被选中的文本。 </ span >
    或者使用:
None.gif < span  onselectstart ="return false;" > 这也是一段不能被选中的文本。 </ span >

    这两种方法有什么异同呢?第一种使用 unselectable属性,只能使该元素内的直接内容不能被选中,如果里面包含子元素,子元素内容不受影响;使用 onselectstart事件,由于IE本身使用bubble up事件处理模型,使用这种方法,将可以屏蔽掉容器元素内任何元素的被选择特性。但是这两个方法却都有一个共同的缺陷,就是如果选择开始于被屏蔽元素之外时,这些被屏蔽的元素还是可以被选中 emangry.gif。看下面的事例:

    这是一段不能被选中的文本。(子元素文本例外) 


     这也是一段不能被选中的文本。(子元素文本依旧)

     如果我们使用鼠标在蓝框绿框内托拽,我们是不能选中内部文本的,同时如果我们选中了其它的元素,点击蓝框内部,不能取消其它元素的选中状态;点击绿框内部则可以取消。可是如果我们使用鼠标从框外开始选取,或者直接按Ctrl+A,这两个本身已经屏蔽选择状态的元素,还是被选中了 emdgust.gif。所以我们如果要屏蔽页面的任何选取操作,最简单的方法就是在body元素上添加onselectstart="return false;"。这样就是不管使用什么方法,也不能选中页面里的元素了 emteeth.gif
None.gif < body  onselectstart ="return false;" >
None.gif    . . .
None.gif
</ body >

    这样一来似乎是一劳永逸了,可是当我们使用input type=text、textarea等控件时,我们会发现这里面也不能使用选择操作了,真是晕死!怎么办呢?

    解铃还须系铃人不是,既然onselectstart使用bubble up特性,那么我们同样在return false之前做检查就行了。比如我们要完全屏蔽页面的选择操作,但是input type=text、textarea内还需要使用选择,解决示例如下:
None.gif < body  onselectstart ="var srcElmt = event.srcElement; if ( srcElmt && ( srcElmt.tagName != 'INPUT' || srcElmt.tagName != 'TEXTAREA' ) return false;" >
None.gif    . . .
None.gif
</ body >

    BTW: 如果是模态窗口就不用自己去弄了,因为里面的元素本身就不能被选中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值