我想用javascript创建一个简单的搜索引擎。我们的想法是读取服务器端文本文件,解析它并找到与用户查询匹配的任何表达式。 是的,我必须使用客户端脚本。
你有什么建议吗?
由于
编辑 - 回复评论的详细信息
我需要解析1个单个文件(最多10.000行)。我不需要自动完成:我只想在SELECT元素中显示匹配查询的字符串。另外,我想尽可能避免使用JQuery。
答案 0 :(得分:2)
您的请求会出现跨浏览器问题,因此使用抽象此IS的库是明智的选择。但是,这是所需呼叫的可能骨架。
请放心,将大文件存储在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();
答案 1 :(得分:1)
如果我理解正确,您需要自动填充功能。对于jQuery,我可以推荐this one。
答案 2 :(得分:0)
一些一般性建议:
indexOf
或正则表达式(请记住/foo/.test(str)
比str.match(/foo/)
!)测试以获取匹配字符串列表。<options>
。操纵数以千计的DOM元素往往要慢得多。确保HTML转义值,并注意您可能会丢失列表中的选定状态(和滚动位置),以防对您的应用程序很重要。希望有所帮助!