JavaScriptでURLのパラメータやアンカーを判断して処理を変更する方法

URLのパラメータやアンカー(#以降の部分)を取得して、その値ごとに処理を変更する方法をまとめました。
URLのパラメータで判断する場合
パラメータは、「?」+「変数(パラメータ)=値」というかたちで構成されています。
![]()
※パラメータは1つとは限らず、複数ある場合は「&」でつないでいきます。
まずlocation.searchを利用して「?」で始まるパラメータ部分を取得します。(substring(1)とすることで2文字目以降[?以外]を取得します)
もしURLにパラメータが存在すれば、さらに「&」で分割した後に、連想配列のkeyとvalueにそれぞれパラメータのkeyとvalueを格納します。
処理を変更するにはif文で条件を指定するだけです。
【パラメータに「id=osaka」が含まれるかどうかを調べる場合】
// URLのパラメータを取得
var urlParam = location.search.substring(1);
// URLにパラメータが存在する場合
if(urlParam) {
// 「&」が含まれている場合は「&」で分割
var param = urlParam.split('&');
// パラメータを格納する用の配列を用意
var paramArray = [];
// 用意した配列にパラメータを格納
for (i = 0; i < param.length; i++) {
var paramItem = param[i].split('=');
paramArray[paramItem[0]] = paramItem[1];
}
// パラメータidがosakaかどうかを判断する
if (paramArray.id == 'osaka') {
$('.pram').append('<p>大阪です</p>');
} else {
$('.pram').append('<p>大阪ではありません</p>');
}
}
URLのアンカーで判断する場合
アンカーの取得は簡単で、location.hashを利用して#以降の部分を取得します。
// URLのアンカー(#以降の部分)を取得
var urlHash = location.hash;
// URLにアンカーが存在する場合
if(urlHash){
// アンカーが#osakaかどうかを判断する
if (urlHash == '#osaka') {
$('.hash').append('<p>大阪です</p>');
} else {
$('.hash').append('<p>大阪ではありません</p>');
}
}
実装例
最後に上記の処理を活用した例をご紹介したいと思います。
jQueryを利用してタブ切り替えを実装します。
URLを判断してデフォルトで開いているタブ(アクティブなタブ)を変更してみたいと思います。
下記のリンクをクリックしてみてください。(クリックするとデモページにとびます)
● パラメータで判断
● #以降のアンカー名で判断
上記のスクリプトにこのようなスクリプトを追加してみました。
$(window).load(function() {
// URLにパラメータが存在する場合
if(urlParam) {
// タブの<a>タグのhref属性の値にパラメータidの値と同じ値が含まれている要素を選択
var targetTabParam = $('.tab-list li a[href$="#' + paramArray.id + '"]');
if(targetTabParam.length > 0){
// HTML側でデフォルトで設定している'active'というクラスを削除する
$('.tab-list li a').removeClass('active');
// <a>タグのhref属性の値とパラメータidが同じだった場合、そのタブの<a>タグに'active'というクラスを付与する
targetTabParam.addClass('active');
}
}
// URLにアンカーが存在する場合
if(urlHash){
// タブの<a>タグのhref属性の値にアンカーの値と同じ値が含まれている要素を選択
var targetTabHash = $('.tab-list li a[href$="' + urlHash + '"]');
if(targetTabHash.length > 0){
// HTML側でデフォルトで設定している'active'というクラスを削除する
$('.tab-list li a').removeClass('active');
// <a>タグのhref属性の値とアンカーが同じだった場合、そのタブの<a>タグに'active'というクラスを付与する
targetTabHash.addClass('active');
}
}
// タブ切り替えを実行
$('.tab-body li:not('+$('.tab-list li a.active').attr('href')+')').hide();
$('.tab-list li a').click(function(){
$('.tab-list li a').removeClass('active');
$(this).addClass('active');
$('.tab-body li').hide();
$($(this).attr('href')).fadeIn();
return false;
});
});
他にもパラメータやアンカーを判断して、画像を切り替えたり、背景色を変えたり、いろいろな表示の出し分けに活用できると思います。


