2009-06-25 94 views
0

我想弄清楚Web浏览器中的搜索工具如何能够通过整个网页进行解析(假设页面上有大量内容)并在我们键入时突出显示结果。在地图中加载时预先缓存页面,还是使用正则表达式快速获得快速结果?浏览器搜索工具如何在网页上工作?

回答

1

该文件已经被解析,由浏览器。搜索文档可以遍历DOM树,决定可以搜索的节点,并注入文档节点来改变显示内容(例如使文本变为粗体等)。

一个标准的字符串匹配算法可以通过一个非常庞大的在第二个文本的解析块(想想看,你可以运行一个3D多人游戏与collition检测,现场宰杀,AI ,,声音,华丽的特效,集成语音聊天,在标准的计算机上60fps,搜索几兆字节的文本是没有什么..)

0

我不知道细节,但我会想像它是类似this

Boyer-Moore算法是搜索文本子串的一种非常快速有效的方法。

0

我期望它会涉及遍历纯文本的dom。我可能只是在猜测,但我会采取行动并寻找可能包含明文的元素,其中我会搜索元素内容和子元素。

如果您在firefox中搜索并通过firefbug查看,您会注意到firefox修改了文档的dom,以便搜索项目是元素本身的子元素,并且应用了突出显示等样式。

例如,这里是,如果我用firefox开始搜索,并强调一切会发生什么情况短语此页上的“eleme”:

<span style="padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;" class="__mozilla-findbar-search">eleme</span> 
1

找到一个更大的文本中的子字符串不是一个艰难的工作,这样的计算机做。实际上,我认为渲染一个html页面(尽管不是太难)比找到一个子字符串要困难得多。如前所述,这里有很快的算法。

请记住,你的机器是几乎完全专注于本在这一刻,所以有大量的处理能力奉献给这个(很简单)的工作...

0

PHP/Smarty的

使用网址编码你可以做到吗?请在urlencode文件上进行选择?= “C-内容”

前缀

示例代码:::: 的print_r($文件);如果(isset($ file)){ $ var = explode(“ - ”,$ file); print_r($ var); $ prefix = $ var [0]; $ script = $ var [1]; } else { $ file =“c-home1”; $ prefix =“c”; $ script =“home”; $ modid = 0; }

if($ script ==“”) $ script =“prod_list”;

---------------------------------------------- --------------------------------------------

//以下代码从sufiix中找出模块并找出脚本名称 switch($ prefix) { case“c”: $ module =“content”; 休息; case“m”: $ module =“myaccount”; 休息;默认: $ module =“content”; 休息; }

$ smarty-> assign(“module”,$ module);

//以下代码从后缀找出模块和找出脚本名

$ include_script = $模块 “/” $脚本。。 “PHP”; ($ include_script)) include_once($ include_script); else include_once(“content/error.php”); ($ script!='home') if($ script =='termsandcondition'){ $ smarty-> display(“content/termsandcondition.tpl”);其他{ $ smarty-> display(“template.tpl”); } } else { $ smarty-> display(“template_home.tpl”); $ smarty-> assign(“msg”,$ msg); $ smarty-> assign(“msglogin”,$ msglogin); } ?>

+1

无关的答案。 – GTM 2010-03-11 19:01:37