13 に答える
function setGetParameter(paramName, paramValue)
{
var url = window.location.href;
var hash = location.hash;
url = url.replace(hash, '');
if (url.indexOf(paramName + "=") >= 0)
{
var prefix = url.substring(0, url.indexOf(paramName + "="));
var suffix = url.substring(url.indexOf(paramName + "="));
suffix = suffix.substring(suffix.indexOf("=") + 1);
suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
url = prefix + paramName + "=" + paramValue + suffix;
}
else
{
if (url.indexOf("?") < 0)
url += "?" + paramName + "=" + paramValue;
else
url += "&" + paramName + "=" + paramValue;
}
window.location.href = url + hash;
}
onclick イベントで上記の関数を呼び出します。
前のソリューションはすべて、パラメーターの部分文字列の可能性を考慮していません。たとえば、http://xyz?ca=1&a=2はパラメータ a ではなく ca を選択します。パラメータを調べてチェックする関数は次のとおりです。
function setGetParameter(paramName, paramValue)
{
var url = window.location.href;
var hash = location.hash;
url = url.replace(hash, '');
if (url.indexOf("?") >= 0)
{
var params = url.substring(url.indexOf("?") + 1).split("&");
var paramFound = false;
params.forEach(function(param, index) {
var p = param.split("=");
if (p[0] == paramName) {
params[index] = paramName + "=" + paramValue;
paramFound = true;
}
});
if (!paramFound) params.push(paramName + "=" + paramValue);
url = url.substring(0, url.indexOf("?")+1) + params.join("&");
}
else
url += "?" + paramName + "=" + paramValue;
window.location.href = url + hash;
}
URL クエリ パラメータを置き換えたいという同様の状況がありました。ただし、パラメーターは 1 つしかなく、単純に置き換えることができました。
window.location.search = '?filter=' + my_filter_value
location.search
プロパティを使用すると、URLのクエリ部分を取得または設定できます。
あなたを動かすためのいくつかの簡単なアイデア:
PHPでは、次のように実行できます。
if (!array_key_exists(explode('=', explode('&', $_GET))) {
/* add the view-all bit here */
}
javascriptの場合:
if(!location.search.match(/view\-all=/)) {
location.href = location.href + '&view-all=Yes';
}
@Lajosの答えを少し変更することをお勧めします...私の特定の状況では、URLの一部としてハッシュが含まれる可能性があり、リダイレクト後にこのメソッドで挿入するパラメーターを解析する際に問題が発生します。
function setGetParameter(paramName, paramValue) {
var url = window.location.href.replace(window.location.hash, '');
if (url.indexOf(paramName + "=") >= 0) {
var prefix = url.substring(0, url.indexOf(paramName));
var suffix = url.substring(url.indexOf(paramName));
suffix = suffix.substring(suffix.indexOf("=") + 1);
suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
url = prefix + paramName + "=" + paramValue + suffix;
}else {
if (url.indexOf("?") < 0)
url += "?" + paramName + "=" + paramValue;
else
url += "&" + paramName + "=" + paramValue;
}
url += window.location.hash;
window.location.href = url;
}
入力から URL を取得しますが、実際の URL に簡単に調整できます。
var value = 0;
$('#check').click(function()
{
var originalURL = $('#test').val();
var exists = originalURL.indexOf('&view-all');
if(exists === -1)
{
$('#test').val(originalURL + '&view-all=value' + value++);
}
else
{
$('#test').val(originalURL.substr(0, exists + 15) + value++);
}
});
PHP でそれを行うには: ページを表示するためのパラメーターがいくつかありaction
ますview-all
。あなたは(おそらく)$action = $_GET['action']
デフォルト値を設定して、すでにこれらにアクセスするでしょう。
次に、のような変数を切り替えたいかどうかに応じて決定します$viewAll = $viewAll == 'Yes' ? 'No' : 'Yes'
。
そして最後に、これらの値を使用して URL を作成するだけです。
$clickUrl = $_SERVER['PHP_SELF'] . '?action=' . $action . '&view-all=' . $viewAll;
以上です。
そのため、ユーザーの URL ではなく、ページのステータスに依存します (後で $viewAll をデフォルトで Yes にするなどの決定を下す可能性があるため)。
これは、JS を使用して URL クエリ文字列を再構築するための私のサンプル コードです。
//function get current parameters
$.urlParam = function(name){
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (results==null){
return null;
}
else{
return results[1] || 0;
}
};
//build a new parameters
var param1 = $.urlParam('param1');
var param2 = $.urlParam('param2');
//check and create an array to save parameters
var params = {};
if (param1 != null) {
params['param1'] = param1;
}
if (order != null) {
params['param2'] = param2;
}
//build a new url with new parameters using jQuery param
window.location.href = window.location.origin + window.location.pathname + '?' + $.param(params);
JQUERY パラメータを使用しました: http://api.jquery.com/jquery.param/を使用して、新しいパラメータで新しい URL を作成しました。
@Marcコードをアップグレードすると、次のようなものが機能すると思います。
//view-all parameter does NOT exist
$params = $_GET;
if(!isset($_GET['view-all'])){
//Adding view-all parameter
$params['view-all'] = 'Yes';
}
else{
//view-all parameter does exist!
$params['view-all'] = ($params['view-all'] == 'Yes' ? 'No' : 'Yes');
}
$new_url = $_SERVER['PHP_SELF'].'?'.http_build_query($params);