rem: node.nodeValue.substr(pos, word.length))); var newNode = node.splitText(pos); newNode.nodeValue = newNode.nodeValue.substr(word.length); node.parentNode.insertBefore(span, newNode); 
add: node.nodeValue.substr(pos, word.length))); node.parentNode.insertBefore(span, node.parentNode.insertBefore( document.createTextNode(node.nodeValue.substr(pos + word.length)), node.nextSibling)); node.nodeValue = node.nodeValue.substr(0, pos); 
context: function searchHighlight() {  if (!document.createElement) return;  var div = document.getElementById("searchable");  if (!div) return;  function getSearchWords(url) {    if (url.indexOf('?') == -1) return [];    var queryString = url.substr(url.indexOf('?') + 1);    var params = queryString.split('&');    for (var p in params) {      var param = params[p].split('=');      if (param.length < 2) continue;      if (param[0] == 'q' || param[0] == 'p') { // q= for Google, p= for Yahoo        var query = unescape(param[1].replace(/\+/g, ' '));        if (query[0] == '!') query = query.slice(1);        words = query.split(/(".*?")|('.*?')|(\s+)/);        var words2 = new Array();        for (var w in words) {          words[w] = words[w].replace(/^\s+$/, '');          if (words[w] != '') {            words2.push(words[w].replace(/^['"]/, '').replace(/['"]$/, ''));          }        }        return words2;      }    }    return [];  }  function highlightWord(node, word, searchwordindex) {    // If this node is a text node and contains the search word, highlight it by    // surrounding it with a span element    if (node.nodeType == 3) { // Node.TEXT_NODE      var pos = node.nodeValue.toLowerCase().indexOf(word.toLowerCase());      if (pos >= 0 && !/^searchword\d$/.test(node.parentNode.className)) {        var span = document.createElement("span");        span.className = "searchword" + (searchwordindex % 5);        span.appendChild(document.createTextNode(            node.nodeValue.substr(pos, word.length)));        var newNode = node.splitText(pos);        newNode.nodeValue = newNode.nodeValue.substr(word.length);        node.parentNode.insertBefore(span, newNode);        return true;      }    } else if (!node.nodeName.match(/button|select|textarea/i)) {      // Recurse into child nodes      for (var i = 0; i < node.childNodes.length; i++) {        if (highlightWord(node.childNodes[i], word, searchwordindex)) i++;      }    }    return false;  }  var words = getSearchWords(document.URL);  if (!words.length) words = getSearchWords(document.referrer);  if (words.length) {    for (var w in words) {      if (words[w].length) highlightWord(div, words[w], w);    }  }}
meta: 1293	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/1293/f2d4dd61d0f704e6155f04c8e7918017b83640aa/trac.js/buggy/htdocs/js/trac.js