快速业务通道

增强 Firefox 中的 Find 命令

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-10

每次搜索都存储在每次调用 processSearch 时都要删除的 lastSearch 变量中.删除后,如果只有一个查询词或者如果需要 twoWordSearch 函数或 grep -v 函数,则使用 oneWordSearch 高亮显示搜索查询.清单 5 显示了关于 removeIndicators 函数的详细信息.


清单 5. removeIndicators 函数

function removeIndicators( textIn )
{
// use XPath to quickly extract all of the rendered text
var textNodes = document.evaluate( ''//text()'', document, null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null );

for (var i = 0; i < textNodes.snapshotLength; i )
{
textNode = textNodes.snapshotItem(i);

if( textNode.data.indexOf( textIn ) != -1 )
{
// find the appropriate parent node with the innerHTML to be removed
var getNode = getHtml( textNode );
if( getNode != null )
{
var temp = getNode.parentNode.innerHTML;
var reg = new RegExp( highStart, "g");
temp = temp.replace( reg, "" );

reg = new RegExp( highEnd, "g");
temp = temp.replace( reg, "" );
getNode.parentNode.innerHTML = temp;

}//if correct parent found

}//if word found
}//for each text node

}//removeIndicators
使用 removeIndicators 无需手动遍历 DOM 树,而是使用 XPath 快速提取文档中的文本节点.如果某个文本节点包含 lastSearch 文本(最近高亮显示的词),则 getHtml 将查找相应的父节点,并且删除高亮显示的文本.注意,将 innerHTML 的提取与 innerHTML 的分配合并为一个步骤将带来各种各样的问题,因此需要将 innerHTML 临时指定为外部变量.清单 6 是 getHtml 函数,该函数将详细展示如何查找相应的父节点.


清单 6. getHtml 函数

function getHtml( tempNode )
{
// walk up the tree to find the appropriate node
var stop = 0;

while( stop == 0 )
{
if( tempNode.parentNode != null &&
tempNode.parentNode.innerHTML != null )
{
// make sure it contains the tags to be removed
if( tempNode.parentNode.innerHTML.indexOf( highStart ) != -1 )
{

// make sure it''s not the title or greppishFind UI node
if( tempNode.parentNode.innerHTML.indexOf( "<title>" ) == -1 &&
tempNode.parentNode.innerHTML.indexOf("btnHighlight") == -1)
{
return( tempNode );

}else{ return(null); }

// the highlight tags were not found, so go up the tree
}else{ tempNode = tempNode.parentNode; }

// stop the processing when the top of the tree is reached
}else{ stop = 1; }

}//while
return( null );
}//getHtml

在遍历 DOM 树搜索 innerHTML 以插入高亮显示的标签时,忽略两个特定节点.不应当更新包含 title 和 btnHighlight 的节点,这些节点中的更改将导致文档无法正常显示.当找到正确的节点时,无论 DOM 树中的父节点有多少个,都返回节点并删除高亮显示.清单 7 是向文档中添加高亮显示的第一个函数.


清单 7. oneWordSearch 函数

function oneWordSearch( textIn )
{
// use XPath to quickly extract all of the rendered text
var textNodes = document.evaluate( ''//text()'', document, null,
XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
null );

for (var i = 0; i < textNodes.snapshotLength; i )
{
textNode = textNodes.snapshotItem(i);

if( textNode.data.indexOf( textIn ) != -1 )
{
highlightAll( textNode, textIn );

}//if word found
}//for each text node

}//oneWordSearch

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号