我编写了一个脚本来搜索和突出显示任何HTML页面上的主题标签,它在文本节点上工作得非常好,但是当页面中涉及HTML标签或特殊字符时,我也遇到了麻烦。例如我希望在以下行中:
and also #<div class="someclass">HashTwo</div>
两个hastags都会突出显示。问题是我的代码是递归的,所以上面例子中的第二个哈希被分成一个节点和chilNnode,因此Regexp没有捕获。
这是我的剧本,感谢任何帮助!
function SearchHilight()
{
var targetNode = document.body;
var skipTags = new RegExp("^(?:SPAN|SCRIPT)$");
var matchRegex = new RegExp("( ]+)", "i");
this.hilightResults = function(node)
{
if(node === undefined || !node) return;
if(skipTags.test(node.nodeName)) return;
if(node.hasChildNodes()) {
for(var i=0; i < node.childNodes.length; i++)
this.hilightResults(node.childNodes[i]);
}
if(node.nodeType == 3) { // NODE_TEXT
if((nv = node.nodeValue) && (regs = matchRegex.exec(nv))) {
var match = document.createElement('SPAN');
match.setAttribute("content", regs[0]);
match.appendChild(document.createTextNode(regs[0]));
match.style.backgroundColor = " match.style.fontStyle = "inherit";
match.style.color = "
var after = node.splitText(regs.index);
after.nodeValue = after.nodeValue.substring(regs[0].length);
node.parentNode.insertBefore(match, after);
}
};
};
this.apply = function()
{
this.hilightResults(targetNode);
};
var thisSearch;
thisSearch = new SearchHilight();
thisSearch.apply();