web-dev-qa-db-ja.com

URLにパラメーターを追加する方法は?

現在のURLはhttp://something.com/mobiles.php?brand=samsungです

ここで、ユーザーが最低価格フィルター(300など)をクリックすると、URLが

http://something.com/mobiles.php?brand=samsung&priceMin=300

言い換えれば、現在のURLに指定されたパラメーターを追加し、Webページを新しいURLにリダイレクトするJavaScript関数を探しています。

注:パラメータが設定されていない場合、関数は?ではなく&を追加する必要があります

つまり、現在のURLがhttp://something.com/mobiles.phpの場合、http://something.com/mobiles.php?priceMin=300ではなくhttp://something.com/mobiles.php&priceMin=300にページをリダイレクトする必要があります。

15
Sumit Gupta

このようなものを試してください、あなたはすでにそのパラメータがurlにある場合も考慮する必要があります:

function addOrUpdateUrlParam(name, value)
{
  var href = window.location.href;
  var regex = new RegExp("[&\\?]" + name + "=");
  if(regex.test(href))
  {
    regex = new RegExp("([&\\?])" + name + "=\\d+");
    window.location.href = href.replace(regex, "$1" + name + "=" + value);
  }
  else
  {
    if(href.indexOf("?") > -1)
      window.location.href = href + "&" + name + "=" + value;
    else
      window.location.href = href + "?" + name + "=" + value;
  }
}

それからあなたはあなたの場合のようにそれを呼び出します:

addOrUpdateUrlParam('priceMin', 300);
18
petho

実際、これは完全に取るに足らないことです。JavaScriptのlocationオブジェクトがすでにこれを扱っているためです。このワンライナーを関数にカプセル化して、リンクなどで再利用します。

<script>
    function addParam(v) {
        window.location.search += '&' + v;
    }
</script>

<a href="javascript:addParam('priceMin=300');">add priceMin=300</a>

これはすでにsearchの部分であり、パラメーターを追加するだけなので、?を確認する必要はありません。

関数を利用したくない場合は、次のように記述できます。

<a href="javascript:location.search+='&priceMin=300';">add priceMin=300</a>

これは、あなたが要求したとおりに機能することに注意してください:特定のパラメーターを追加するためURIで同じパラメーターを複数回使用できるため、これはsearchパーツの一部である可能性があります。アプリケーション内で正規化することもできますが、それは別のフィールドです。 URL正規化をそれ自体の関数に集中化します。

編集:

上記の受け入れられた回答に関する議論では、機能する関数を取得するために次の条件を満たす必要があることが明らかになりました。

  • パラメータがすでに存在する場合は、変更する必要があります。
  • パラメータがすでに複数回存在する場合、変更されたコピーのみが存続します。
  • パラメータがすでに存在しているが値がない場合は、値を設定する必要があります。

searchは既に検索文字列を提供しているので、あとはクエリ情報部分を名前と値のペアに解析し、不足している名前と値を変更または追加して、searchに戻すだけです。

<script>
    function setParam(name, value) {
        var l = window.location;

        /* build params */
        var params = {};        
        var x = /(?:\??)([^=&?]+)=?([^&?]*)/g;        
        var s = l.search;
        for(var r = x.exec(s); r; r = x.exec(s))
        {
            r[1] = decodeURIComponent(r[1]);
            if (!r[2]) r[2] = '%%';
            params[r[1]] = r[2];
        }

        /* set param */
        params[name] = encodeURIComponent(value);

        /* build search */
        var search = [];
        for(var i in params)
        {
            var p = encodeURIComponent(i);
            var v = params[i];
            if (v != '%%') p += '=' + v;
            search.Push(p);
        }
        search = search.join('&');

        /* execute search */
        l.search = search;
    }
</script>

<a href="javascript:setParam('priceMin', 300);">add priceMin=300</a>

これは、次のようなURLを処理できるため、少なくとももう少し堅牢です。

test.html?a?b&c&test=foo&priceMin=300

あるいは:

test.html?a?b&c&test=foo&pri%63eMin=300

さらに、追加された名前と値は常に適切にエンコードされます。これが失敗する可能性があるのは、パラメーター名が不正なプロパティjsラベルになった場合です。

15
hakre
if(location.search === "") {
    location.href = location.href + "?priceMin=300";
} else {
    location.href = location.href + "&priceMin=300";
}

location.search === ""の場合、?の部分はありません。

?newpart.php?newpartになるように追加します。

それ以外の場合は、すでに?パーツがあります。

&newpart.php?existingpart&newpartになるように追加します。


Hakreのおかげで、次のように設定することもできます。

location.search += "&newpart";

必要に応じて自動的に?が追加されます(明確でない場合は、この方法で?&newpartになりますが、問題ありません)。

5
pimvdb

PHPで正解の回答を書き換えます。

function addOrUpdateUrlParam($name, $value){
$href = $_SERVER['REQUEST_URI'];
$regex = '/[&\\?]' . $name . "=/";
if(preg_match($regex, $href)){
    $regex = '([&\\?])'.$name.'=\\d+';
    $link = preg_replace($regex, "$1" . $name . "=" . $value, $href);
}else{
    if(strpos($href, '?')!=false){
        $link = $href . "&" . $name . "=" . $value;
    }else{
        $link = $href . "?" . $name . "=" . $value;
    }
}
return $link;
}

誰かの助けになれば幸いです...

2
Leon Bauer
var applyMinPrice = function(minPrice) {
    var existingParams = (location.href.indexOf('?') !== -1),
        separator = existingParams ? '&' : '?',
        newParams = separator + 'priceMin=' + minPrice;

    location.href += newParams;
}
1
Martin

_var urlString = window.location_を使用してURLを取得します

uRLにすでに「?」が含まれているかどうかを確認しますurlString.indexOf('?')では、-1は存在しないことを意味します。

リダイレクトするように_window.location_を設定します

これはJavaScriptの101に似ています。いくつかの検索エンジンを試してみてください!

0
zeal
<FORM action="" method="get">
<P>
<LABEL for="brand">Brand: </LABEL>
          <INPUT type="text" id="brand"><BR>
<LABEL for="priceMin">Minimum Price: </LABEL>
          <INPUT type="text" id="priceMin"><BR>
</P>
0
Sherif elKhatib
<html>
<body>
..
..
..

<?php
$priceMinValue= addslashes ( $_GET['priceMin']);
if (!empty($priceMin)) {
        $link = "currentpage.php?priceMin=". $priceMinValue;
        die("<script>location.href = '".$link. "'</script>");    
}
?>
</body>
</html>
0
Suresh

ユーザーにテキストフィールドに最低価格を入力してもらう場合は、フォームにGETリクエストとして空のアクションを送信させてみませんか? IIRC、JavaScriptを使用せずに、必要な処理を実行できます。

0
bjelleklang