PHPとかサーバーサイドの言語だとURLのパラメータを簡単に取得できますが、javascriptだとひと手間加える必要があります。
今回はjavascriptを使ってなるURLのパラメータを取得する方法を紹介します。
目次
取得方法
window.location.searchを使う
window.location.searchを使うと、?を含むURLのパラメータを文字列で取得できます。
例えば、下記のコードを実行してみましょう。
//test.html?param1=test¶m2=sampleの場合 //コンソールに?param1=test¶m2=sampleが表示される。 console.log(window.location.search);
これで簡単に取得できました。
ただし、このままでは「param1の値だけを取得」などの処理ができません。
URLSearchParamsを使う
特定のパラメータの値を取得したい場合はURLSearchParamsも同時に使うことで簡単に取得できるようになります。
//test.html?param1=test¶m2=sampleの場合
//window.location.searchをURLSearchParamsに渡す
var urlParams = new URLSearchParams(window.location.search);
//param1の値を取得する
console.log(urlParams.get('param1'));
パラメータが配列になっている場合は、下記のコードでデータを取得できます。
//test.html?param[]=test¶m[]=sampleの場合
//param[]の値を取得する
//["test", "sample"]がコンソールに出力される
console.log(urlParams.getAll('param[]'));
特定のパラメータが存在するか確認する場合はhas(‘パラメータ名’)を使うと存在チェックができます。
//test.html?param=sample¶m3=の場合
//trueが返される
console.log(urlParams.has('param1'));
//falseが返される
console.log(urlParams.has('param2'));
//値は入っていないが、パラメータは存在するのでtrueが返される
console.log(urlParams.has('param3'));
パラメータのみを取得・パラメータとデータを取得
パラメータのみを取得
パラメータのみを取得する場合は以下のコードで取得することができます。
配列ではなくオブジェクトで返されることに注意しましょう。
//test.html?param1=test¶m2=sampleの場合
//パラメータの一覧がオブジェクトで返される
var keys = urlParams.keys();
for(key of keys) {
console.log(key);
}
パラメータとデータを取得
パラメータとデータを同時に取得する場合は以下のコードで取得することができます。
オブジェクトと配列が入っていることに注意しましょう。
//test.html?param1=test¶m2=sampleの場合
//オブジェクトが返される
var entries = urlParams.entries();
//pairにパラメータとデータの配列が代入される
for (pair of entries) {
//pair[0]がパラメータ
//pair[1]がデータ
console.log(pair[0], pair[1]);
}
URLSearchParamsが使えないとき
URLSearchParamsですがすべてのブラウザに対応しているわけではありません。
(※Edgeは対応してませんでした。)
以下のコードでデータを取得することが可能です。
//test.html?param1=sampleの場合
//指定したパラメータのデータを取得する関数
function getUrlParameter(name) {
name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
var results = regex.exec(location.search);
return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
};
//sampleが出力される
console.log(getUrlParameter('param1'));
//コンソールに何も表示されない(nullが返されるため)
console.log(getUrlParameter('param2'));

コメント