function highlightAll( nodeOne, textIn ) { if( nodeOne.parentNode != null ) { full = nodeOne.parentNode.innerHTML; var reg = new RegExp( textIn, "g"); full = full.replace( reg, highStart textIn highEnd ); nodeOne.parentNode.innerHTML = full; }//if the parent node exists }//highlightAll
function highlightOne( nodeOne, wordOne, wordTwo ) { var oneIdx = nodeOne.data.indexOf( wordOne ); var tempStr = nodeOne.data.substring( oneIdx wordOne.length ); var twoIdx = tempStr.indexOf( wordTwo );
// only create the highlight if it''s not too close if( twoIdx > dist ) { var reg = new RegExp( wordOne ); var start = nodeOne.parentNode.innerHTML.replace( reg, highStart wordOne highEnd ); nodeOne.parentNode.innerHTML = start; }//if the distance threshold exceeded }//highlightOne
如果两个词不在同一个节点中,则在第一次匹配时设置 foundSingleNode 变量.对于后续匹配,在第二次节点匹配之前,当再次侦测到单个节点时,调用 highlightAll 函数.这将确保高亮显示第一个词的每个实例 — 甚至第二个词不在附近的那些词.在循环过程中,如果隔离了一个 wordOne 匹配并且仍然需要高亮显示,则执行最终检查以运行 highlightAll.
将用以上代码创建的文件另存为 greppishFind.user.js,继续阅读获得安装和使用细节.
安装 greppishFind.user.js 脚本
打开安装了 Greasemonkey V0.7 扩展的 Firefox 浏览器,并输入 greppishFind.user.js 所在目录的 URL.单击 greppishFind.user.js 文件,然后应当会看到标准 Greasemonkey 安装弹出.选择 install,然后重新载入页面以激活扩展.
用法示例
在将 greppishFind.user.js 脚本安装到 Greasemonkey 中后,可以通过输入 dom inspector 作为在 www.google.com 中的搜索查询模拟图 1 中所示的示例.显示结果页面时,请按 Alt = 组合键激活用户界面.键入查询 DOM(区分大小写)并按 Enter 键以查看所有高亮显示的 DOM 条目.将查询更改为 DOM hierarchy,您将看到如何只高亮显示前三个 DOM 条目,如图 1 所示.
选择诸如 file:///home/ 或 file:///c:/ 之类的目录清单以显示类似图 2 中列出的条目.您可能需要更改距离参数或者高亮显示样式才能得到符合搜索条件的结果.
结束语
有了以上代码和已完成的 greppishFind.user.js 程序后,您现在已经为在 Firefox 中实现自己的文本搜索功能打下了基础.虽然此程序主要关注某些词与其他词极为接近的特殊情况,但是它为以后的文本搜索选项提供了框架.
考虑根据第二搜索词的邻近程度为高亮显示词添加颜色变化.扩展 grep -v 词的数目以逐步删除条目.使用本文的代码结合您自己的想法创建新的 Greasemonkey 用户脚本,进一步增强用户查找文本的能力.
|