Hatena::Groupkeysnail

きすねた(ん)

2010-02-22

「次へ」、「前へ」などをよしなにたどる機能

| 21:38 | 「次へ」、「前へ」などをよしなにたどる機能 - きすねた(ん) を含むブックマーク はてなブックマーク - 「次へ」、「前へ」などをよしなにたどる機能 - きすねた(ん)

アレが欲しいこれが欲しいとかちょっとずつ - hogelogの日記 - keysnailグループ がナイスな感じに便利だったので、これベースにちょこちょこ付け加えてみた。

本家との違いは以下の通り。

  • XPath でなく Selectors API を使用
  • 文字だけでなく rel 属性も見る

Selectors APIFirefox 3.0 で使えないという欠点があるのだけれど XPath よりも断然高速に動作し、記述も分かりやすい (個人的に) ので好き。

いやーしかしこの機能本当に便利。次バージョンでは function.js に含めるかな。

hogeloghogelog2010/02/23 00:10地味にそこからも改変していたり。 http://gist.github.com/304619
違いは「リンクとかはページの後ろにあることが多いから後ろの要素からチェックしていること」、
「rel要素はaだけじゃなくてlinkも見る」とか。

あとついregexpを|で繋いで一発でチェックしてしまいましたがこれは一個ずつ
「まずregexp1でelem1~elemNをチェック、そのあとregexp2で…regexpNでelemNをチェック」
のようにした方が良いかもしれません。
そうすることで「これ含まれてたら確実に次へのリンクだな」みたいのを一番最初に指定、
次は確実性が低いのというように使うことができますから。
これらをやるとたぶん vimperatorの挙動そのまんまです。

ちなみに僕の書き散らしたコードのライセンスは但し書き無ければPDとかCCとかそんな感じに
受け止めて貰って問題無いので適当に流用してください。ライセンスも糞もねえレベルのものばっかですけど。
どっかから流用してきたコードはライセンスとか明記してありますので。

querySelectorAllは動的に追加されたノードとかを捕まえてきてくれないらしいというのがちょっと気になります。
まあだから高速なんだろうなあと思いますが。

moozmooz2010/02/23 00:49アドバイスどうもです。

> リンクとかはページの後ろにあることが多いから後ろの要素からチェックしていること
これ確かにそうですねー。目から鱗です。
querySelectorAll にして最後の要素持ってくるとかにしてみます。

> これ含まれてたら確実に次へのリンクだな」みたいのを一番最初に指定、
確かに、正規表現パターンごとに全ての要素見た方が誤爆が少ないかもしれませんね。修正します。

いい感じに .keysnail.js が熟成されてきているようで、見ていて楽しいです。

moozmooz2010/02/23 00:52> querySelectorAllは動的に追加されたノードとかを捕まえてきてくれないらしいというのがちょっと気になります。

あー、そんなことがあったんですか。それは知りませんでした。

document.eval の引数やクエリの内容がややこしく感じてしまっていつも使う気失せるんですが、やはり XPath も覚えないとですね……