25
4

13 に答える 13

67
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 イベントで上記の関数を呼び出します。

于 2012-10-25T07:55:44.680 に答える
5

前のソリューションはすべて、パラメーターの部分文字列の可能性を考慮していません。たとえば、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;
}
于 2016-11-15T14:56:07.153 に答える
4

URL クエリ パラメータを置き換えたいという同様の状況がありました。ただし、パラメーターは 1 つしかなく、単純に置き換えることができました。

window.location.search = '?filter=' + my_filter_value

location.searchプロパティを使用すると、URLのクエリ部分を取得または設定できます。

于 2014-03-13T17:36:26.670 に答える
1

あなたを動かすためのいくつかの簡単なアイデア:

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';
}
于 2012-10-25T07:57:44.540 に答える
1

@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;
}
于 2015-09-14T14:41:51.977 に答える
1

入力から 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++);
    }
});

http://jsfiddle.net/8YPh9/31/

于 2012-10-25T08:22:22.123 に答える
1

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 にするなどの決定を下す可能性があるため)。

于 2012-10-25T07:52:51.563 に答える
0

これは、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 を作成しました。

于 2016-01-07T07:19:07.313 に答える
-1

@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);
于 2012-10-25T08:18:10.153 に答える