URLの文字列にクエリ文字列(URLパラメーター)を追加

URLの文字列にクエリ文字列(URLパラメーター)を追加するには、次のような方法で実装します。

関数定義

JavaScript

var addUrlParam = function(path, key, value, save) {
	if (!path || !key || !value) return '';

	var addParam      = key + '=' + value,
	    paths         = path.split('/'),
	    fullFileName  = paths.pop(),
	    fileName      = fullFileName.replace(/[\?#].+$/g, ''),
	    dirName       = path.replace(fullFileName, ''),
	    hashMatches   = fullFileName.match(/#([^#]+)$/),
	    paramMatches  = fullFileName.match(/\?([^\?]+)$/),
	    hash          = '',
	    param         = '',
	    params        = [],
	    fullPath      = '',
	    hitParamIndex = -1;

	if (hashMatches && hashMatches[1]) {
		hash = hashMatches[1];
	}

	if (paramMatches && paramMatches[1]) {
		param = paramMatches[1].replace(/#[^#]+$/g, '').replace('&', '&');
	}

	fullPath = dirName + fileName;

	if (param === '') {
		param = addParam;
	} else if (save) {
		params = param.split('&');

		for (var i = 0, len = params.length; i < len; i++) {
			if (params[i].match(new RegExp('^' + key + '='))) {
				hitParamIndex = i;
				break;
			}
		}

		if (hitParamIndex > -1) {
			params[hitParamIndex] = addParam;
			param = params.join('&');
		} else {
			param += '&' + addParam;
		}
	} else {
		param += '&' + addParam;
	}

	fullPath += '?' + param;

	if (hash !== '') fullPath += '#' + hash;

	return fullPath;
};

使い方

var resultUrl = addUrlParam(path, paramKey, paramValue, save);

引数

引数名 説明
第一引数
必須
path string 追加元のURL文字列
第二引数
必須
paramKey string 追加するパラメータのキーの名称
第三引数
必須
paramValue string 追加するパラメータの値
第四引数 save boolean すでに同じパラメータのキーが存在していた場合に上書きをするかどうか
設定値は上書きする場合はtrue、上書きせず追加する場合はfalse(デフォルト)

戻り値

追加元のURLに結合されたURLの文字列を返します。

サンプルコード

JavaScript

var sampleElement = document.getElementById('sample'),
    hrefAttrValue = sampleElement.getAttribute('href');

var setUrlValue = addUrlParam(hrefAttrValue, 'q', 'サンプル');

sampleElement.setAttribute('href', setUrlValue);

JavaScript逆引きリファレンス一覧へ戻る