<script>タグから読み込んだjsのディレクトリを取得
2010/04/18(日) 13:21 Javascript親記事へこのエントリーをはてなブックマークに追加

<script src="..."> という感じでjsファイルを読み込んで、src部分が
http://example.com/lab/test.js であるとき、
http://example.com/lab/ を自分自身で取り出す方法を模索する。

自分自身のsrcを調べる方法は

とてもシンプルに自分自身が属する script 要素を取得 - IT戦記
http://d.hatena.ne.jp/amachang/20061201/1164986067
で大体いいと思います。 もしくは
var n=document.getElementsByTagName("script");
n[n.length-1].src; // 自分自身のurl
相対パスの場合とか調べてないけど、今回の主題はディレクトリを取り出すとこなので後回し。
Twitterでどういう方法があるのだろうと投げてみたらいろいろな方法が返ってきたので見てみる。

Togetter - まとめ「scriptタグからディレクトリを取得」
に皆さんから言っていただいたものがまとめてあります。
var src = "http://example.com/lab/test.js";
としたとき。
  • lastIndexOfを使う方法
ブラウザ間で差が少なく、比較的早い感じ。
また今回の題材だと、ディレクトリのパスが長いほど有利になるので一番よいかも。
src.slice(0, src.lastIndexOf("/") + 1);
  • split,pop,joinを使う方法
ディレクトリパスだけをとるならpopが少し気になるけど、jsのファイル名もとるならいいのかも。
IEはsplit,joinが苦手だそうで。(そこまで大きな差ではないが)
var a = src.split("/");
var dir = a.pop(); // jsのファイル名
a.join("/") + "/"; // ディレクトリ
  • split,slice,joinを使う方法
なんとなくリズムが好きな書き方。
上と同じくらいの速度。Firefoxは比較的早めになる。
src.split("/").slice(0, -1).join("/") + "/";
  • 正規表現execを使う方法
マッチしたものを取り出す。
Chromeだと正規表現は早いみたい。
/^.+\//.exec(src)[0];
  • 正規表現でreplace
いらない(ファイル名)部分を削ろうって発想
ブラウザ間でばらつく。
src.replace(/[^/]+$/, "");
実際に動かす場合は以下のソース
gist: 369771 - GitHub
http://gist.github.com/369771

実際に使うときはそこまで差が出てくれるわけではないと思うので、好きな方法でいい気がする。

Konnoさんの教科書解
Konno Free Software Blog: #JavaScript: URI.prototype.basename and URI.prototype.dirname properties
http://konno-freesoftware.blogspot.com/2010/04/javascript-uribasename-and-uridirname.html


名前:  非公開コメント   

  • TB-URL  http://efcl.info/adiary/033/tb/