划词搜索Extjs实现方式,支持IE、FireFox浏览器。根据http://www.javascriptcn.com/code/20071106/5.html代码改进而成。希望对实现划词搜索的兄弟们有所帮助。
在需要的jsp页面中引用(要在body中,否则会出错):
<script type="text/javascript" src="js/ZonedWordSearch.js"></script>
简化代码源码如下:
Ext.ux.ZonedWordSearch = function() {
var zwDiv, starobj, isdb = false, allow = true;
return {
init : function() {
zwDiv = Ext.DomHelper.insertFirst(document.body, {
id : "ZonedWordSearchDivId"
}, true);
// 原来是自己的div点击事件处理,实现系统的智能搜索,这里去掉,用原文章的innerHTML实现google搜索
if (Ext.isIE) {
document.onmousedown = this.recordobj;
document.ondblclick = this.dblclick;
document.onmouseup = this.showselect;
} else {
window.onmousedown = this.recordobj;
window.ondblclick = this.dblclick;
window.onmouseup = this.showselect;
}
},
dblclick : function() {
isdb = true;
},
recordobj : function(evt) {
evt = (evt) ? evt : ((window.event) ? window.event : "")
if (evt) {
starobj = (evt.target) ? evt.target : evt.srcElement
}
},
showselect : function(evt) {
var obj;
var strlen;
evt = (evt) ? evt : ((window.event) ? window.event : "")
if (evt) {
if (evt.target) {
obj = evt.target;
var selection = window.getSelection();
if (selection && selection.focusNode && obj != selection.focusNode.parentNode) {
zwDiv.hide();
return;
}
strlen = selection.toString();
} else {
obj = event.srcElement;
strlen = document.selection.createRange().text;
}
}
var str = "";
if (obj.tagName != "A" && obj.tagName != "INPUT" && obj == starobj
&& !isdb && allow) {
if (strlen.length > 0) {
str = strlen;
}
}
tangram.search.ZonedWordSearch.searchdiv(str, evt);
isdb = false;
},
searchdiv : function(str, evt) {
var obj = zwDiv;
if (str.toString().length == 0) {
obj.hide();
return;
}
obj.applyStyles("width:60px;position:absolute;display:block;z-index:999");
obj.setX(evt.clientX + 5);
obj.setY(evt.clientY - 25);
obj.dom.innerHTML ="<a target=_blank href=http://www.google.com/search?ie=UTF-8&oe=UTF -8&q="+str+" style='BORDER-RIGHT: royalblue thin solid; BORDER-TOP: royalblue thin solid; FONT-WEIGHT: bold; BORDER-LEFT: royalblue thin solid; CLIP: rect(auto auto auto auto); COLOR: #ffffff; BORDER-BOTTOM: royalblue thin solid; BACKGROUND-COLOR: inactivecaption; TEXT-DECORATION: none'>划词搜索!</a>";
obj.show();
}
}
}();
Ext.onReady(Ext.ux.ZonedWordSearch.init, Ext.ux.ZonedWordSearch);