koike
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; }); });
他にもパラメータやアンカーを判断して、画像を切り替えたり、背景色を変えたり、いろいろな表示の出し分けに活用できると思います。