我想用javascript製作一個簡單的搜索引擎。這個想法是讀取一個服務器端的文本文件,解析它,並找到任何匹配用戶查詢的表達式。 是的,我必須使用客戶端腳本。簡單的搜索引擎與JavaScript。任何建議?
你有什麼建議嗎?
謝謝 。
編輯 - 詳細回答評論
我需要解析1個單個文件(最大10.000線)。我不需要自動完成:我只想在SELECT元素中顯示匹配查詢的字符串。另外,如果可能的話,我想避免使用JQuery。
我想用javascript製作一個簡單的搜索引擎。這個想法是讀取一個服務器端的文本文件,解析它,並找到任何匹配用戶查詢的表達式。 是的,我必須使用客戶端腳本。簡單的搜索引擎與JavaScript。任何建議?
你有什麼建議嗎?
謝謝 。
編輯 - 詳細回答評論
我需要解析1個單個文件(最大10.000線)。我不需要自動完成:我只想在SELECT元素中顯示匹配查詢的字符串。另外,如果可能的話,我想避免使用JQuery。
您將在請求中出現跨瀏覽器問題,因此使用抽象化該庫的庫是一個明智的選擇。然而,這是所需調用的可能框架。
請放心,將一個大文件存儲在一個javascript變量中並不是很聰明。小心你在做什麼!
var words = [];
var query = "";
function parseText(data) {
// taking care of data
// check null handle errors
var data = data.replace(/\W+/g,' '); // replace non words with spaces
words = data.split(' '); // split and cache this if you need it again without refetching
doSearch(query);
}
function doSearch(query) {
// handle the loop trough the array
// you may save the data into a variable and use regex instead of splitting into an array
}
function handler() {
if(this.readyState == 4 && this.status == 200) {
// so far so good
if(this.responseXML != null && this.responseXML != "")
// success!
parseText(this.responseXML);
else
parseText(null);
} else if (this.readyState == 4 && this.status != 200) {
// fetched the wrong page or network error...
parseText(null);
}
}
query = "someword";
var client = new XMLHttpRequest();
client.onreadystatechange = handler;
client.open("GET", "/remote.txt");
client.send();
完美,謝謝!我的文件不是那麼大,所以我猜你的建議可以解決問題。 – pasta 2011-06-06 12:27:56
如果我正確地理解了你,你需要自動完成。對於jQuery,我可以推薦this one。
一些一般性的建議:
indexOf
或正則表達式(記住/foo/.test(str)
比str.match(/foo/)
更快!)測試以獲取列表的匹配字符串。<options>
。操縱數千個DOM元素往往要慢得多。確保HTML轉義這些值,並且要注意,如果這對於您的應用程序很重要,您可能會失去列表中的選定狀態(和滾動位置)。希望幫助!
爲什麼不AJAX和做它的服務器端? – LouwHopley 2011-06-06 10:20:44
你需要解析多少個文件?它只是一個文件,還是多個?如果有很多大文件,它可能會很快在網絡上變得沉重。 – Arend 2011-06-06 10:20:51
你想每頁做一次或多次搜索嗎?即它需要多高效? – 2011-06-06 12:05:29