| body | |
| { | |
| font-size: 14px; | |
| } | |
| h3 | |
| { | |
| display: inline; | |
| margin: 0; | |
| } | |
| #spnKeyNum, #spnWordNum | |
| { | |
| color: #F00; | |
| } | |
| #spnList a | |
| { | |
| font-size: 12px; | |
| color: #0000FF; | |
| } | |
| #spnTime | |
| { | |
| color: #600; | |
| } | |
| textarea, #divDisplay | |
| { | |
| margin: 0; | |
| padding: 0; | |
| font-size: 14px; | |
| display: block; | |
| background: #EEE; | |
| border: #999 solid 1px; | |
| } | |
| #txtKeys | |
| { | |
| width: 95%; | |
| height: 100px; | |
| } | |
| #txtContent, #divDisplay | |
| { | |
| height: 400px; | |
| width: 95%; | |
| } | |
| #divDisplay | |
| { | |
| display: none; | |
| overflow: auto; | |
| } | |
| #divDisplay em | |
| { | |
| color: #F00; | |
| font-style: normal; | |
| } | |
| #divFoot | |
| { | |
| padding: 5px; | |
| width: 95%; | |
| } | |
| #spnLable2 | |
| { | |
| margin: 5px; | |
| float: left; | |
| color: #690; | |
| } | |
| button | |
| { | |
| float: left; | |
| } | |
| #desc | |
| { | |
| color: #333; | |
| float: right; | |
| } | |
关键字 | |
| (0个) | |
| 世界城市 | |
| 部分英文单词 | |
| 成语全集 | |
内容 | |
| (0字) | |
| 搜索用时: 0ms | |
| EtherDream 2009 | |
| var tblRoot; | |
| /* | |
| * 函数: makeTree | |
| * 注释: 将关键字生成一颗树 | |
| */ | |
| function makeTree() | |
| { | |
| var strKeys = objKeys.value; | |
| var arrKeys = strKeys.split(""); | |
| var tblCur = tblRoot = {}; | |
| var key; | |
| for(var i=0,n=arrKeys.length; i | |
| { | |
| key = arrKeys[i]; | |
| if(key == ';') //完成当前关键字 | |
| { | |
| tblCur.end = true; | |
| tblCur = tblRoot; | |
| continue; | |
| } | |
| if(key in tblCur) //生成子节点 | |
| tblCur = tblCur[key]; | |
| else | |
| tblCur = tblCur[key] = {}; | |
| } | |
| tblCur.end = true; //最后一个关键字没有分割符 | |
| } | |
| /* | |
| * 函数: search | |
| * 注释: 标记出内容中关键字的位置 | |
| */ | |
| function search(content) | |
| { | |
| var tblCur; | |
| var i = 0; | |
| var n = content.length; | |
| var p, v; | |
| var arrMatch = []; | |
| while(i < n) | |
| { | |
| tblCur = tblRoot; | |
| p = i; | |
| v = 0; | |
| for(;;) | |
| { | |
| if(!(tblCur = tblCur[content.charAt(p++)])) | |
| { | |
| i++; | |
| break; | |
| } | |
| if(tblCur.end) //找到匹配关键字 | |
| v = p; | |
| } | |
| if(v) //最大匹配 | |
| { | |
| arrMatch.push(i-1, v); | |
| i = v; | |
| } | |
| } | |
| return arrMatch; | |
| } | |
| var $ = function(id){return document.getElementById(id)}; | |
| var objKeys = $("txtKeys"); | |
| var objContent = $("txtContent"); | |
| var objDisplay = $("divDisplay"); | |
| var bKeyChanged = false; | |
| function handleKeyChange() | |
| { | |
| var str = objKeys.value; | |
| var n; | |
| if(str.length==0) | |
| n = 0; | |
| else | |
| n = str.split(";").length; | |
| /* | |
| * 显示关键字数量 | |
| */ | |
| $("spnKeyNum").innerHTML = n; | |
| bKeyChanged = true; | |
| } | |
| function handleContentChange() | |
| { | |
| /* | |
| * 显示内容长度 | |
| */ | |
| $("spnWordNum").innerHTML = objContent.value.length; | |
| } | |
| function handleLoad() | |
| { | |
| handleKeyChange(); | |
| handleContentChange(); | |
| } | |
| function handleClick() | |
| { | |
| var strContent = objContent.value; | |
| var arrMatch; | |
| var arrHTML = []; | |
| var strHTML; | |
| var mid; | |
| var p = 0; | |
| $("btnStart").disabled = true; | |
| $("btnReset").disabled = false; | |
| if(bKeyChanged) | |
| { | |
| makeTree(); | |
| bKeyChanged = false; | |
| } | |
| /* | |
| * 开始搜索! | |
| */ | |
| var t = +new Date(); | |
| arrMatch = search(strContent); | |
| /* | |
| * 搜索用时 | |
| */ | |
| $("spnTime").innerHTML = +new Date() - t; | |
| /* | |
| * 标记关键字 | |
| */ | |
| for(var i=0,n=arrMatch.length; i | |
| { | |
| mid = arrMatch[i]; | |
| arrHTML.push(strContent.substring(p, mid), | |
| "", | |
| strContent.substring(mid, p = arrMatch[i+1]), | |
| ""); | |
| } | |
| arrHTML.push(strContent.substring(p)); | |
| strHTML = arrHTML.join("").replace(/\n/g, " "); | |
| /* | |
| * 显示结果 | |
| */ | |
| objDisplay.innerHTML = strHTML; | |
| objContent.style.display = "none"; | |
| objDisplay.style.display = "block"; | |
| } | |
| function reset() | |
| { | |
| $("btnStart").disabled = false; | |
| $("btnReset").disabled = true; | |
| objContent.style.display = "block"; | |
| objDisplay.style.display = "none"; | |
| } | |
| function load(file) | |
| { | |
| /* | |
| * 创建HTTP组件 | |
| */ | |
| if(window.ActiveXObject) | |
| { | |
| objHttp = new ActiveXObject("Microsoft.XMLHTTP"); | |
| } | |
| else | |
| { | |
| objHttp = new XMLHttpRequest(); | |
| objHttp.overrideMimeType("text/xml"); | |
| } | |
| objHttp.onreadystatechange = function() | |
| { | |
| if(objHttp.readyState != 4) | |
| return; | |
| objKeys.value = objHttp.responseText; | |
| handleKeyChange(); | |
| }; | |
| /* | |
| * 发送请求 | |
| */ | |
| objHttp.open("GET", file, true); | |
| objHttp.send(null); | |
| } | |