URLのクエリはLocationオブジェクトのsearchプロパティに、すべてのパラメータが1つの文字列として連結されて格納されています。
ここで紹介する方法ではその文字列を分割し、パラメータ名をキーとした連想配列 (オブジェクトのプロパティ) としてGETパラメータを取得できます。
function GetQueryString()
{
if( 1 < document.location.search.length )
{
// 最初の1文字(?記号)を除いた文字列を取得する
var query = document.location.search.substring( 1 );
// クエリの区切り記号(&)で文字列を配列に分割する
var parameters = query.split( '&' );
var result = new Object();
for( var i = 0; i < parameters.length; i++ )
{
// パラメータ名とパラメータ値に分割する
var element = parameters[ i ].split( '=' );
var paramName = decodeURIComponent( element[ 0 ] );
var paramValue = decodeURIComponent( element[ 1 ] );
// パラメータ名をキーとして連想配列に追加する
result[ paramName ] = decodeURIComponent( paramValue );
}
return result;
}
return null;
}
例えばクエリが?a=1&b=c%26dだとすると、この関数からは{ a="1", b="c&d" }が返されます。
Prototype.jsを使用するならば、Stringの拡張メソッドであるtoQueryParams()で、
var query = document.location.search.toQueryParams();
と記述するだけです。このメソッドにより上記の関数と同様の結果が返されます。