LoginSignup
18
17

More than 5 years have passed since last update.

ページ内の画像への直リンクを全部開く

Last updated at Posted at 2012-02-09

あとはわかるよな?

open_all_images.js
var ss = document.evaluate("//a",document,null,7,null);
for(var i = 0; i<ss.snapshotLength; i++) {
  var url = ss.snapshotItem(i).getAttribute("href");
  if (url && url.search(/(jpg|jpeg|png)$/) != -1) window.open(url);
}

 
 

すごくざっくりとした解説

XPath による DOM エレメントの抽出

1行目の document.evaluate() は、XPath を使って DOM を抽出するメソッドです。
DOM 抽出は jQuery が使えるならそのほうが楽なんですが、FireFoxのグリースモンキーや、Chromeのユーザースクリプト、ブックマークレットのように jQuery が使えないときに、その代用として使えます。また、ネイティブ実装によって処理されるので、jQueryより検索が早くなる事が期待できます。

引数が5個ありますが、とりあえず使うのは、第1,4引数だけです。

-第1引数の "//a" は 「 a タグを、ルート要素からの子孫要素内について検索」のXPath 表記です。"//" は子孫要素内の検索を意味し、"a" は a タグを指定しています。そして、最初に何も書いてないのでルートからの検索になります。
-第4引数は9なら最初1個だけ抽出、7なら全部抽出、と覚えておけばよいです。
あとの引数は、とりあえず固定でかまいません。

詳しくは https://developer.mozilla.org/ja/Introduction_to_using_XPath_in_JavaScript ここら辺を参照してみてください。XPathの構文については、なんだかんだでwikipediaが分かりやすかったです。ググって調べてください。

抽出結果の取得

さて、これで XPath の条件にあった DOM エレメントが抽出されました。次以降の for 文では、抽出した要素を抜き出しています。
evaluate メソッドの返値は snapshot と呼ばれるオブジェクトで、snapshotLengthというプロパティとsnapshotItem()というメソッドを持っています。抜き出し方は簡単で、snapshotLengthで抽出した要素数を取得して、そのインデックスをsnapshotItem()に渡せばDOMエレメントが返ってきます。3行目では、返ってきたDOMエレメントから直接 href の値を取得しています。

あとは、取得したリンク先の最後が、jpg、jpeg、png のどれかなら window.open() しておしまいです。

18
17
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17