HTMLのテーブルに対するインクリメンタルGrep
いやなブログで紹介されているインクリメンタルGrepを利用して、HTMLのテーブルをGrepするものを書いてみた。
なにかしらのデータを表示するとき使えると思われ。
var displaystyle; function grep (pattern) { try { regex = new RegExp(pattern, "i"); trs = document.getElementsByTagName('tr'); for (i = 0; i < trs.length; i++) { e = trs[i]; if (e.className == "line") { if(displaystyle == null){ displaystyle = e.style.display; } var str = e.innerText || e.innerHTML; if (str.match(regex)) { e.style.display = displaystyle; } else { e.style.display = "none"; } } } } catch (e) { // 正規表現の文法エラーを無視する } }
ポイントは2つ。
ブラウザごとのCSSのサポート具合が違うので、trのdisplayのstyleが1つに決まらないこと。
IEは、display=block、Safariは、table-rowとなる。いろいろ調べるのは面倒なので、
はじめの検索時に、変数にdisplayのstyleを保存しておくことで対応。
もう1つは、trタグに対する、innerText の動き。
どうも、FireFoxでは空になってしまうもよう。なので、
var str = e.innerText || e.innerHTML;
として対応。
一応IE6、FireFox 1.0.2、Safariで動作確認。