一个站内搜索功能,有点像用Ctrl+F那样!!

danjingwu 2005-03-07 12:10:24
现在我有一张静态页面(html文件),里面列了无数的人员,现在我想做一个搜索输入框,希望实现以下的功能
1。在输入框里面输入关键字,然后可以在静态页面中,自动找到,并反对搜索到的项。(和在网页里用Ctrl+F搜索的效果一样)
2。可以从其他页搜索,然后转到该静态页面,并反白该关键字!!

请做过类似功能的高手过两招给小弟,谢谢!!!
...全文
171 点赞 收藏 10
写回复
10 条回复
笨笨兔兔兔兔兔 2005年03月07日
静态页面比较简单,用instr就能找到了

在用一个collection(忘记dhtml中是不是叫这个了,反正在msdn上一查就知道了,做个区域选择就可以了)

其他页搜索的话,你用xmlhttp技术了,做个asp的文本搜索页就是了,一样用instr进行搜索不过很慢,最好还是用做个索引表比较好
回复 点赞
笨笨兔兔兔兔兔 2005年03月07日
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/createelement.asp

教程是说MSDN的网站,你在网站搜索就好了,在method里面,东西是最全的,所以我从来不记的,到时候现查

其他页面的搜索是这样的,算了还是写点儿正确的代码吧

主页面是

url是你的xxx.asp?xx=yy
set xmlhttp1 = CreateObject("Microsoft.XMLHTTP")
xmlhttp1.open "GET",url,false
xmlhttp1.send()
text1=xmlhttp1.responsetext
把text1写到你要显示的地方就可以了,这个就不多写了

xxx.asp中是这样的
theword=request("xx")
set fso=server.createobject("scripting.filesystemobject")
set objTStream=fso.OpenTextFile(你要检查的文件,1)
do while not objTStream.AtEndOfStream
str=str & objTStream.ReadLine
loop
objTStream.close
比如这个页面里你只要<p></p>的内容
wordlen=lenb(theword)
startpos=instrb(str,"<p>")
startpos=startpos+3
endpos=instrb(str,"</p>")
endpos=endpos+4
do while true
thewordpos=instrb(starpos,str,theword,endpos)
if thewordpos<>0 then
finalstr=fianlstr & midb(str,starpos,thewordpos-startpos)
finalstr=fianlstr & "<font color='ffffcc'>" & theword & "</font>" midb(str,thewordpos+thewordlen,endpos-thewordpos-thewordlen)
startpos=instrb(str,"<p>")
if stratpos=0 then
exit
end if
startpos=startpos+3
endpos=instrb(str,"</p>")
endpos=endpos+4
end if
loop

大概的查找就是这个样子了,我中间有逻辑缺失你自己补一下就是了



回复 点赞
calmer18 2005年03月07日
test.htm:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>test</title>
</head>

<body>

<input type=text value='' onkeyup="if(event.keyCode==13){findInPage(this.value);}">
网页内容......
<script language=javascript>
function findInPage(str){var n=0;
txt = window.document.body.createTextRange();
for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
txt.moveStart("character", 1);
txt.moveEnd("textedit");
}
if (found) {
txt.moveStart("character", -1);
txt.findText(str);
txt.select();
txt.scrollIntoView();
n++;
}
else {
alert("抱歉!您要找的内容不存在。");
}
}
var temp,temps
url=location.href;
reg=/\?.*/ //得到网页地址?后面的值
temps=reg.exec(url);
if(temps){
temp=temps[0];
temp=temp.substring(1,temp.length);
findInPage(temp);//执行查找函数}
</script>
</body>
</html>

从其他页传值可以这样:
在要搜索的页地址后面加上 ?要搜索的参数 这样格式的字符
比如上面的页面,我要搜索 "页内" 这个值,就用 test.htm?页内 这样的地址
具体的你可以改改
另:比FORM先执行是因为我在文本框的onkeyup事件中执行了函数
回复 点赞
danjingwu 2005年03月07日
TO:philcc(一包中华)
这种办法不支持模糊搜索,并不实用!我需要的是可以想平常的搜索一样的功能,
只是表现方法不同,
一种是搜索数据库,我的是要搜索一个静态页面,并把所有符合条件的字符都凸现出来
回复 点赞
philcc 2005年03月07日
看你这么多分,教你个最简单的,是asp和html的结合!
利用表单得到需要查询的人员名,
传值给一个连接(<A HREF="#人员名(传过来的)">)该步骤可设为自动执行
在人员名前加:<A NAME="人员名"></A>人员名

ok
回复 点赞
笨笨兔兔兔兔兔 2005年03月07日
createTextRange我说的是这个函数,偶会用,不过我都是查MSDN才能想起来的

而且我用的是vbs做查询的
回复 点赞
showliz 2005年03月07日
从网上下载个ASP版的站内查询程序套上去就行啦。
回复 点赞
danjingwu 2005年03月07日
TO:calmer18(FF)
你这个在本页测试是可以成功的,请问如果要从其他页传值进来,该怎么做啊
我发现你这个会比form标签先执行啊!
回复 点赞
sharing 2005年03月07日
帮忙顶
回复 点赞
calmer18 2005年03月07日
楼上说的糊里糊涂.....
<script language=javascript>
function findInPage(str){
var n=0;
txt = window.document.body.createTextRange();
for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
txt.moveStart("character", 1);
txt.moveEnd("textedit");
}
if (found) {
txt.moveStart("character", -1);
txt.findText(str);
txt.select();
txt.scrollIntoView();
n++;
}
else {
alert("抱歉!您要找的内容不存在。");
}
}
</script>
<body>
<input type=text value='' onkeyup="if(event.keyCode==13){findInPage(this.value);}">
网页内容.........
</body>

这个在IE下测试通过
回复 点赞
发动态
发帖子
ASP
创建于2007-09-28

1.9w+

社区成员

35.7w+

社区内容

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区公告
暂无公告