■ はてなアンケートの一覧から不要なものを消し去る Greasemonkey スクリプト
はてなの アンケート一覧 を定期的に見て小銭を稼いでいますが、たまーに、自分の答えられない質問が大量に投稿される事があったので、これを消すスクリプトを考えてみました。ていうか、手段が目的でして XPath をもっと使ってみたかったってだけですけど。
で結果はこんな感じ。
// ==UserScript== // @name Clear Hatena::Enquete // @include http://q.hatena.ne.jp/list* // /==UserScript== var nodes = document.evaluate( "//img[contains(@src,'kotaeru2.gif')]/parent::*/parent::*", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); for (var i = 0, elm; elm = nodes.snapshotItem(i); i++) { elm.style.opacity = '0.5'; //elm.style.display = 'none'; }
消しちゃうのも寂しいので半透明にしてますが、見なくて良ければコメントアウトしてある display = 'none' を有効にすれば表示されなくなります。はっきり言ってどうでも良いスクリプトです。どうせアンケートもそんな多くないし。
あ、そうそうこうやって無効なモノを半透明にする効果は結構見た目がわかりやすくて好きなんですけどどうでしょう?CSS 必須だから他の方法でも無効な効果を表現しないといけませんけど。
それで肝心の XPath の話題。
前々から XPath ってすんごい意味わかんねぇなぁあとか思ってたけど、やっぱ良くわからん。とりあえず、ドキュメントは XML Path Language なんか読むと良いっぽい。これだけを見てもさっぱりだけど。つか、まだ全然読んでないし。
今回新しく覚えたのは、パスの後ろに /parent で親ノードが参照出来る事と /ancestor で祖先ノードを辿れる事。
/div/img だと div の子ノードの img が参照されて。/img/parent::DIV だと img の親ノードの div が参照される。この違いは大きい。あと例えば parent::DIV とかやって親ノードが DIV じゃない場合は何もマッチしなくなる。* は全マッチだから parent::* とかやると良い。
もうひとつ ancestor は祖先を全部辿って探してくる。例えば /ancestor::TR とかやると親の親の親と辿っていって、TR がいたら全部マッチする。今回のはてなの奴は "//img[contains(@src,'kotaeru2.gif')]/parent::TR" とかやっても同じように動作する。
今までは適当にパス指定して、後は nextSibling とか parentNode を駆使したりしていたけど、元からちゃんと指定出来るんだったらそっちの方がいいな。
しかしこれ、バッドノウハウ臭がすごいよ、まじで。便利だけど。
Posted by Kyosuke Takayama at 2006-08-07 (Mon) 16:51 printable version