為了在Web頁(yè)面上使用文本搜索,在文本框內實(shí)現選擇效果,在頁(yè)面上屏蔽選擇狀態(tài)等。我們需要使用腳本(如JavaScript)來(lái)精確的控制頁(yè)面中UI元素的選擇狀態(tài)。下面從操作元素選擇區和屏蔽元素被選擇兩個(gè)方面來(lái)說(shuō)一說(shuō)。
操作元素選擇區,我們可以使用對應對象的select()方法選擇頁(yè)面內容,其中包括INPUT元素中的內容、TextRange對象中的文字和controlRange Collection對象中的控件。
1、
Select Input <input id="txb" type="text" value="Text Box"/>
<a href="#" onclick="document.getElementById(‘txb‘).select()">Select</a> 2、
this is a span. Select Text <span id="spn">this is a span.</span>
<a href="#" onclick="SelectText();">Select</a>
<script language="javascript">
function SelectText()
{
var range = document.body.createTextRange();
range.findText("this is a span.");
range.select();
}
</script> 3、
Select Control <select id="slt1"><option>select</option></select>
<select id="slt2"><option>select</option></select>
<a href="#" onclick="SelectControl();">Select</a>
<script language="javascript">
function SelectControl()
{
var controlRange = document.body.createControlRange();
controlRange.add(document.getElementById(‘slt1‘));
controlRange.add(document.getElementById(‘slt2‘));
controlRange.select();
}
</script> 上面是主動(dòng)操作頁(yè)面元素的選擇狀態(tài),下面說(shuō)說(shuō)怎么屏蔽頁(yè)面中的選中狀態(tài)。
在IE5.5及以上版本中,我們可以使用這兩種方便的方法來(lái)屏蔽對元素的選擇。一是使用元素的屬性unselectable,另一種方法是使用元素的事件onselectstart。比如我們讓一個(gè)span內的文字不能不選擇,我們可以使用:
<span unselectable="on">這是一段不能被選中的文本。</span> 或者使用:
<span onselectstart="return false;">這也是一段不能被選中的文本。</span> 這兩種方法有什么異同呢?第一種使用
unselectable屬性,只能使該元素內的直接內容不能被選中,如果里面包含子元素,子元素內容不受影響;使用
onselectstart事件,由于IE本身使用bubble up事件處理模型,使用這種方法,將可以屏蔽掉容器元素內任何元素的被選擇特性。但是這兩個(gè)方法卻都有一個(gè)共同的缺陷,就是如果選擇開(kāi)始于被屏蔽元素之外時(shí),這些被屏蔽的元素還是可以被選中
??聪旅娴氖吕?br>
這是一段不能被選中的文本。(子元素文本例外) 這也是一段不能被選中的文本。(子元素文本依舊) 如果我們使用鼠標在藍框或綠框內托拽,我們是不能選中內部文本的,同時(shí)如果我們選中了其它的元素,點(diǎn)擊藍框內部,不能取消其它元素的選中狀態(tài);點(diǎn)擊綠框內部則可以取消。可是如果我們使用鼠標從框外開(kāi)始選取,或者直接按Ctrl+A,這兩個(gè)本身已經(jīng)屏蔽選擇狀態(tài)的元素,還是被選中了
。所以我們如果要屏蔽頁(yè)面的任何選取操作,最簡(jiǎn)單的方法就是在body元素上添加onselectstart="return false;"。這樣就是不管使用什么方法,也不能選中頁(yè)面里的元素了
。
<body onselectstart="return false;">
. . .
</body> 這樣一來(lái)似乎是一勞永逸了,可是當我們使用input type=text、textarea等控件時(shí),我們會(huì )發(fā)現這里面也不能使用選擇操作了,真是暈死!怎么辦呢?
解鈴還須系鈴人不是,既然onselectstart使用bubble up特性,那么我們同樣在return false之前做檢查就行了。比如我們要完全屏蔽頁(yè)面的選擇操作,但是input type=text、textarea內還需要使用選擇,解決示例如下:
<body onselectstart="var srcElmt = event.srcElement; if ( srcElmt && ( srcElmt.tagName != ‘INPUT‘ || srcElmt.tagName != ‘TEXTAREA‘ ) return false;">
. . .
</body> BTW: 如果是模態(tài)窗口就不用自己去弄了,因為里面的元素本身就不能被選中。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。