特定のTABLEのTDのテキストを取り出すブックマークレット

Webアプリが定型のフォーマットで情報を出力するページを持っている場合、いつも決まった箇所に表示されるテキストを抽出できると、色々と便利なこともある。そんなわけで、HTMLでTABLE要素の特定の箇所にあるTD要素のテキストを取り出すブックマークレットを作ってみた。

javascript:(function(){prompt("",getText(getTd(0,0,0)))})();function getTd(i,j,k){var table=document.getElementsByTagName("TABLE").item(i);var tbody=table.getElementsByTagName("TBODY").item(0);var tr=tbody.getElementsByTagName("TR").item(j);return tr.getElementsByTagName("TD").item(k)}function getText(e){if(e==null)return e;if(e.nodeName=="#text")return e.nodeValue;return getText(e.firstChild);}

上記スクリプトの先頭付近にある「getTd(0,0,0)」の引数には、TD要素の位置を0始まりで指定する。例えば「getTd(0,1,2)」なら、表示しているHTMLページの0番目の表(TABLE)の1番目の行(TR)の2番目の列(TD)のテキストを取り出す。
TD要素を取り出す関数getTd()と要素中のテキスト(正確にはDOMツリーのfirstChildの末端)を取り出すgetText()を組み合わせて工夫すれば、色々応用が効く。例えば、はてなのトップページ(http://www.hatena.ne.jp/)のヘッダからユーザ名を取り出すブックマークレットなんてのも作れる。

javascript:(function(){var td=getTd(1,0,0);var id=getText(td);if(td.childNodes.length==4)id=getText(td.childNodes.item(1));prompt("",id)})();function getTd(i,j,k){var table=document.getElementsByTagName("TABLE").item(i);var tbody=table.getElementsByTagName("TBODY").item(0);var tr=tbody.getElementsByTagName("TR").item(j);return tr.getElementsByTagName("TD").item(k)}function getText(e){if(e==null)return e;if(e.nodeName=="#text")return e.nodeValue;return getText(e.firstChild);}

ちなみに、はてなにログインしていないと、TD要素の中が「ようこそゲストさん」なので、ユーザ名だけを取ることはできません。あと、はてなダイアリーのページだと、HTMLの構造が違うのでうまく取れません。
その辺は、HTMLの構造に合わせてテキストを取り出す位置を変えれば良いのだけど、IEだとブックマークレットが508文字を超えると動かないようなので、これ以上改良するのは厳しいかも。上記のコードで既に479文字です。関数名や変数名を短くすれば、もう少し余裕はあるけど。