Javascript版 location.search汎用クラス
URLが、
hoge.html?param1=0001¶m2=0002
のばあい、'?'以降を、ブラウザオブジェクトでは、window.location.searchとして取得することができる。
※ 正確にはsearchの部分はURLに含まないらしい。
これを分割して、連想配列のように取得するクラスを作ってみた。
var oSearch = new CLocationSearch(location.search); document.write(oSearch.item('param1');のように使うことができる。
function CLocationSearch(sSource) { /* 初期化処理 */ var sAry = new Array(); /* アイテム配列を追加 */ { var nCur = 0, nRet = 0; var sSearch = sSource.substr(1); var sName, sValue; nRet = sSearch.indexOf('=', nCur) // 最初の'='を検索 while(nRet >= 0) { // '='以前が変数名 sName = sSearch.substring(nCur, nRet); nCur = nRet + 1; // 値を取り出す nRet = sSearch.indexOf('&', nCur); // 変数の区切りを検索 if (nRet == -1) nRet = sSearch.length + 1; // なければ最後まで sValue = sSearch.substring(nCur, nRet); // 配列に格納 sAry[sName] = sValue; // 次を検索 nCur = nRet + 1; nRet = sSearch.indexOf('=', nCur); } } /* 値 */ this.valueOf = function () { return sSource; } /* 値を取り出すメソッド */ this.item = function (sVarname) { try { return sAry[sVarname]; //あれば返す } catch(e) { return ''; //なければ空文字を返す } } /* 要素数 */ this.length = function () { return sAry.length; } /* toString */ this.toString = function () { return this.length + ''; } }
2010.08.26 おまけ。最近こんなんも作った。おんなじパラメータ名が複数ある場合は配列にまとめちゃいます。
<script type="text/javascript"> //<![CDATA[ window.location.searchArray || (function () { var source = window.location.search.substr (1); var regex = /([^&?=]+)=([^&?=]+)/g; var result = []; var match = []; while (match = regex.exec (source)) { var key = unescape (match[1].replace ("+", " ")); var val = unescape (match[2].replace ("+", " ")); if (key in result) result [key].push (val); else result [key] = [val, ]; } location.searchArray = []; for (var key in result) location.searchArray[key] = (result[key].length == 1)? result[key][0]: result[key]; } ()); document.write ('<pre>'); for (var k in location.searchArray) document.writeln (k + ":" + location.searchArray[k]); document.write ('</pre>'); //]]> </script>
トラックバック
- このエントリーにトラックバック:
- http://frog.raindrop.jp/cgi-bin/mt/mt-tb.cgi/65
コメント
こんにちは、kioskと申します。
ちょうどlocation.searchの汎用関数を探していたので助かりました。
こんにちわ、kiosk さん。
コメントありがとうございます。
あんまりきれいな作りじゃなくて恐縮です。