如何在忽略子节点的HTML标记的同时递归搜索节点

时间:2016-08-08 09:19:36

标签: javascript regex

我编写了一个脚本来搜索和突出显示任何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();

0 个答案:

没有答案