<script>タグから読み込んだjsのディレクトリを取得
<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
で大体いいと思います。 もしくは
Twitterでどういう方法があるのだろうと投げてみたらいろいろな方法が返ってきたので見てみる。
Togetter - まとめ「scriptタグからディレクトリを取得」
に皆さんから言っていただいたものがまとめてあります。
また今回の題材だと、ディレクトリのパスが長いほど有利になるので一番よいかも。
IEはsplit,joinが苦手だそうで。(そこまで大きな差ではないが)
上と同じくらいの速度。Firefoxは比較的早めになる。
Chromeだと正規表現は早いみたい。
ブラウザ間でばらつく。
実際に使うときはそこまで差が出てくれるわけではないと思うので、好きな方法でいい気がする。
Konnoさんの教科書解
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を使う方法
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
コメント(0件)
- TB-URL http://efcl.info/adiary/033/tb/