ページ内 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); })()