JavascriptでURLパラメータを連想配列にして取得する。
静的HTMLでもURLパラメータ渡しは可能です。
例えば以下のような呼び出し方です。
sample.html?id=test&date=2018-12-19&page=2
プログラムをされておられる方ならおなじみです。
?は以降パラメータを意味します。
&は次のパラメータ開始を意味します。
=を挟んで左がパラメータ名で、右が値を意味します。
上記の例だと以下のような意味になります。
id : test
date : 2018-12-19
page : 2
PHPなどプログラムであれば、これらのURLパラメータの値を取得することは容易にできます。例えばPHPの記述であれば、以下のように変数としてパラメータを使用します。
echo $_REQUEST[“id”] ・・・ 「test」が表示されます
echo $_REQUEST[“date”]・・・「2018-12-19」が表示されます。
echo $_REQUEST[“page”]・・・「2」が表示されます。
しかしこれがJavascriptだと簡単にはいきません。
そこで、PHPのようにURLパラメータを取り出す関数がないか探してみました。
ググってみたらたくさん出てきましたが、いまひとつ使い勝手が難しい
いつものごとくGoogleで探してみたところたくさん出てきました。
ただ、どれも独自性が強く汎用性が低かったため、これらを参考に作ってみることにしました。
やりたいことは、Javascriptでパラメータを連想配列で使用することです。
PHPのように連想配列化されていれば、汎用性が高くなります。
これを念頭に置いて考えてみました。
作ってみた関数がこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<script> function para_get() { // URLパラメータを"&"で分離する var url_search = location.search.substr(1).split('&'); // パラメータ連想配列エリア初期化 var para = []; // キーエリア初期化 var key = null; for(var i = 0 ; i < url_search.length ; i++) { // "&"で分離したパラメータを"="で再分離 key = url_search[i].split("="); // パラメータを連想配列でセット para[key[0]] = key[1]; } // 連想配列パラメータを返す return (para); } </script> |
考え方は、URLパラメータ文字列の分割分離作業です。
今回の例だと、パラメータ部分は「?id=test&date=2018-12-19&page=2」なので、&と=を分割・分離してゆきます。
location.search.substr(1)の1は、パラメータの1文字目が「?」なので2文字目からを使用するという意味です。事実上「?」の文字をカットしています。
split(‘&’)は、「&」の文字を境に文字列を分割しています。
この段階で変数のurl_searchには以下のように格納されています。
url_searchの中身
“id=test”, “date=2018-12-19”, “page=2”
3つのパラメータがあるので、for文でパラメータの数分ループし、今度は「=」の文字を境に分割します。
変数keyには以下のように格納されてゆきます。
key変数1回目
“id”, “test”
key変数2回目
“date”, “2018-12-19”
key変数3回目
“page”, “2”
左側がパラメータ名なので、連想名としてセットします。
右側がパラメータの値なので、連想配列の値としてセットします。
これでPHPのようにURLパラメータを扱うことができます。