m2

ページ内 grep (IE不可)

勢いで前に書いたのを添削もせずにのっけてみる。IE不可。完全一致のみ。改善希望。

(function(){
  var style = document.createElement('style');
  style.type = 'text/css';
  style.style.display = 'none';
  style.textContent = '.simplegrep_hide { margin: 0 !important; padding: 0 !important; border-width: 0 !important; height: 0 !important; overflow: hidden !important; }';
  document.documentElement.appendChild(style);
  var dv = document.createElement('div');
  dv.innerHTML = '<form><input name="q" size="20"><input type="submit" value="grep"><input type="button" value="clear"></form>';
  dv.firstChild.addEventListener('submit', function(e) {
     e.stopPropagation();
     e.preventDefault();
     var query = dv.firstChild.q.value.replace('"', '\\"');
     style.disabled = false;
     var xpath = 'following::*[count(descendant-or-self::*[contains(text(),"' + query + '")])=0]';
     var result = document.evaluate(xpath, dv, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
     for (var i = 0; i < result.snapshotLength; i++) {
       var item = result.snapshotItem(i);
       if (!/div|p|ol|ul|li|dl|dt|dd|tr|table|body/i.test(item.nodeName)) continue;
       if (!/\bsimplegrep_hide\b/.test(item.className)) item.className += ' simplegrep_hide';
     }
  }, false);
  var exp = document.createExpression('/\/*[contains(@class,"simplegrep_hide")]', null);
  dv.firstChild.lastChild.addEventListener('click', function(e) {
     style.disabled = true;
     setTimeout(function() {
       var result = exp.evaluate(document, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
       for (var i = 0; i < result.snapshotLength; i++) {
         var item = result.snapshotItem(i),
             orgClass = item.className,
             newClass = item.className.replace(/\bsimplegrep_hide\b/g, '');
         if (orgClass != newClass) item.className = newClass;
       }
     }, 100);
  }, false);
  document.body.insertBefore(dv, document.body.firstChild);
})()

bookmarklet: