脚本说明: 第一步:把如下代码加入<body>区域中 <form name="database"> <input type="hidden" name="list" value='http://www.webcrawler.com~Webcrawler|keywords for first file go here separated by spaces^A great search engine from the makers of AOL!*http://java2000.126.com~java2000 collections|java javascript search html download cgi perl dhtml games activex 下载 脚本^coolest java and javascript collections for internet surfers to enhance web page! *http://www.javagoodies.com/~javagoodies|ActiveX ASP C/C++ CGI Databases java javascript^coolest javagoodies!*'> </form> <p> <script language="JavaScript"> <!-- version = 1.0; // --> </script> <script language="JavaScript1.1"> <!-- version = 1.1; // --> </script> <script language="JavaScript"> <!-- // When set to true, searching for "fun*y" matches in the string "fun sky". // (it will also match the string "fun and here is some long dummy text for you" // which is obviously not what they were looking for, so we suggest you set // match_across_word_boundaries to false) // When set to false, the * operator will not match across word boundaries so // the above example will not match. match_across_word_boundaries = false; // false is suggested strongly
// ************ NO NEED TO MODIFY ANYTHING BELOW THIS POINT ************
function Page(url,title,keywords) { while ((url.length > 0) && (url.charAt(0) == " ")) { url = url.substring(1,url.length); } this.url = url; while ((title.length > 0) && (title.charAt(0) == " ")) { title = title.substring(1,title.length); } this.title = title; this.keywords = keywords; return this; } function Database() { var pos = 0; while ((pos1 = amorphous.indexOf("~",pos)) != -1) { pos2 = amorphous.indexOf("|",pos1+1); pos3 = amorphous.indexOf("*",pos2+1); if ((pos2 != -1) && (pos2 < pos3) && (pos3 <= amorphous.indexOf("*",pos))) { this[database_length++] = new Page(amorphous.substring(pos,pos1), amorphous.substring(pos1+1,pos2), amorphous.substring(pos2+1,pos3)); pos = pos3+1; } else { // error reading amorphous database if (pos+30 <= amorphous.length) alert('Error reading in amorphous database around "' + amorphous.substring(pos,pos+30) + '"'); pos = amorphous.indexOf("*",pos) + 1; } } return this; } var array = new Object(); array_length = 0; // Netscape 2 fix var position = new Object(); position_length = 0; // Netscape 2 fix function pattern(str) { array_length = position_length = 0; while ((str.length > 1) && (str.charAt(0) == "*")) { str = str.substring(1,str.length); } while ((str.length > 1) && (str.charAt(str.length-1) == "*")) { str = str.substring(0,str.length-1); } if (str == "*") return "(true)"; if (str.indexOf("*") == -1) { array[array_length++] = str; pat = "(combo.indexOf(array[0]) != -1)"; } else { left = right = 0; pat2 = ""; pat = "(((position[0] = combo.indexOf(array[0])) != -1)"; while ((right = str.indexOf("*",left)) != -1) { array[array_length++] = str.substring(left,right); pat += " && (position["+(position_length)+"] < (position[" +(++position_length)+"] = combo.indexOf(array["+(array_length) +"],position["+(position_length-1)+"]+array["+(array_length-1)+"].length"+")))"; if (!match_across_word_boundaries) pat2 = " && (no_back_up = ((back_up_pos += combo.substring(" +"temp_pos = back_up_pos = position[" +(position_length-1)+"]+array["+(array_length-1)+"].length,position[" + (position_length) + "]).lastIndexOf(' ')) < temp_pos))" + pat2; left = right+1; } array[array_length++] = str.substring(left,str.length); pat += pat2+")"; } return pat; } function search(str) { menu_length = 0; temp = new Object(); temp_length = 0; words_length = 0; words = new Object(); pos = 0; while ((pos = str.indexOf(" ")) != -1 && and_search != "exact") { words[words_length] = str.substring(0,pos); if (words[words_length].length > 0) words_length++; if (str.length == 1) str=""; else str = str.substring(pos+1,str.length); } if (str.length > 0) words[words_length++] = str; for (q=0;q<words_length;q++) { temp_length = 0; str = words[q].toLowerCase(); pattern_string = pattern(str); start_pos = back_up_pos = 0; len = (and_search=="and"&&q>0?menu_length:database_length); for (n=0; n<len; n++) { no_back_up = true; position_length = 0; if (and_search=="and"&&q>0) { combo = (menu[n].title + " " + menu[n].keywords).toLowerCase(); } else { combo = (database[n].title + " " + database[n].keywords).toLowerCase(); } combo = combo.substring(start_pos,combo.length); if (eval(pattern_string)) { // found temp[temp_length++] = (and_search=="and"&&q>0?menu[n]:database[n]); start_pos = 0; } else if (!no_back_up) { // try pattern again in new spot n--; start_pos += back_up_pos+1; } else { // not found start_pos = 0; } } if (and_search!="and" && q>0) { added = 0; for (i=0;i<temp_length;i++) { duplicate = false; for (j=0;j<menu_length&&!duplicate;j++) { if (menu[j] == temp[i]) { duplicate = true; } } if (!duplicate) menu[menu_length+(added++)] = temp[i]; } menu_length += added; } else { for(h=0;h<temp_length;h++) menu[h] = temp[h]; menu_length = temp_length; } } } function entry() { if ((document.entryform.keyword.value.length == 0)
(document.entryform.keyword.value == " ")) { alert("First you must enter a keyword to search for."); return false; } and_search = (document.entryform.and_or.selectedIndex == 0?"and":"or"); if (document.entryform.and_or.selectedIndex == 2) and_search = "exact"; if (version >= 1.1) { search(document.entryform.keyword.value); if (menu_length == 0) menu[menu_length++] = new Page("","Not found!",""); document.display.found.options.length = menu_length; for (n=0; n<menu_length; n++) { if (menu[n].title.length <= 50) document.display.found.options[n].text = menu[n].title; else document.display.found.options[n].text = menu[n].title.substring(0,50); document.display.found.options[n].value = menu[n].url; } } else { location.href = location.pathname + "?" + escape(document.entryform.keyword.value) + (and_search != "or"?"&"+and_search:""); } return false; } function go_there() { sel = document.display.found.selectedIndex; if ((sel != -1) && (document.display.found.options[sel].value.length > 0)) location.href = document.display.found.options[sel].value; }
var amorphous = document.database.list.value; temp_str = amorphous.substring(amorphous.length-2,amorphous.length); if (temp_str.indexOf("*") == -1) amorphous += "* "; else amorphous += " "; // amorphous database must have characters after last asterisk
database_length = 0; // Netscape 2 fix var database = new Database(); // read in from amorphous database
menu_length = 0; // Netscape 2 fix var menu = new Object();
string = ""; and_search = "or"; if (location.search.length > 1) { string = unescape(location.search.substring(1,location.search.length)); pos = 0; while ((pos = string.indexOf('"',pos)) != -1) { string = string.substring(0,pos) + '\\"' + string.substring(pos+1,string.length); pos += 2; } if (string.substring(string.length-4,string.length) == "&and") { string = string.substring(0,string.length-4); and_search = "and"; } else if (string.substring(string.length-6,string.length) == "&exact") { string = string.substring(0,string.length-6); and_search = "exact"; } else if (string.substring(string.length-3,string.length) == "&or") { string = string.substring(0,string.length-3); and_search = "or"; } search(string); } document.write('<form name="entryform" class="pt9" onSubmit="return entry()">' +'Search for: <input type="text" type="pt9" size=15 name="keyword" value="'+string+'"> ' +'<input type="button" class="pt9" value="Search" onClick="entry()"><br><select name="and_or" ' +'size=1><option'+(and_search=="and"?" selected":"")+'>AND查询 ' +'(AND)<option'+(and_search=="or"?" selected":"")+'>OR查询 ' +'(OR)<option'+(and_search=="exact"?" selected":"")+'>完全' +'匹配</select><br>""可以使用通配符</form><br>' +'<form name="display"><select name="found" size=5>\n'); for (n=0; n<menu_length; n++) document.write('<option value="'+menu[n].url+'">'+menu[n].title+'\n'); if ((menu_length == 0) && (location.search.length <= 1)) document.write('<option value="" class="pt9">Enter a search keyword above\n'); else if ((menu_length == 0) && (location.search.length > 1)) document.write('<option value="">关键字"' +location.search.substring(1,location.search.length)+'"没有发现!\n'); document.write('</select><br><input type="button" class="pt9" onClick="go_there()" ' +'value=" Go There "></form>'); // --> </script>
|