実際これはJavaScriptの場所オブジェクトは既にこれを扱っているので、まったく問題ありません。ただ、リンクなどでそれを再利用する機能には、このワンライナーをカプセル化:
<script>
function addParam(v) {
window.location.search += '&' + v;
}
</script>
<a href="javascript:addParam('priceMin=300');">add priceMin=300</a>
これはすでにsearch
一部で、あなただけのparamを追加する必要があるとして?
をチェックする必要はありません。
あなたも、あなたがように書くことができる機能を利用するにはしたくない場合:その特定のパラメータを追加するには:
<a href="javascript:location.search+='&priceMin=300';">add priceMin=300</a>
が、これはあなたが求めてきましたまさにないことに注意してください。これはすでにsearch
の一部になっている可能性があります。これは、同じパラメータをURIに複数回使用できるためです。アプリケーション内でこれを正規化することもできますが、それは別のフィールドです。私はURL正規化をそれ自身の関数に集中させます。
編集:それが必要、パラメータがすでに存在する場合
- :それ以上の受け入れ答えについての議論で
は、次の条件が働く機能を得るために満たさなければならないという、明らかになりました変更する。
- パラメータが複数回存在する場合は、変更されたコピーのみが存続する必要があります。
- パラメータがすでに存在するが値がない場合は、値を設定する必要があります。
search
がすでに検索文字列を提供しているように、唯一のことは、達成するために左に、名前と値のペアにそのクエリ-info部を解析欠落している名前と値を変更したり、追加しsearch
に戻って、それを追加することです
test.html?a?b&c&test=foo&priceMin=300
あるいは:
:それはこれらのようなURLを取り扱うことができるよう
<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>
は、これは、少なくとも、もう少し堅牢です
test.html?a?b&c&test=foo&pri%63eMin=300
さらに、追加された名前と値は常に正しくエンコードされます。これが失敗する可能性があるのは、パラメータ名が不正なプロパティjsラベルになる場合です。
...私はその助けの誰かを願っていますが、リンクサーバー側を生成したり使用することはできません任意の理由を
をウェブフォーム? – zzzzBov
私は@zzzzBovに同意します。その後、最低価格フィルタをダイナミックリンクにすることができます。 – iLLin
ブランド名、価格帯、人気順、価格別などのように、私のウェブサイトにはフィルタが多すぎます。サーバー側でURLを生成するには 'if-else'ステートメントが多く必要であり、サーバーに不必要な負荷が発生します。私は具体的にクライアント側でURLの変更を探しています。ありがとう! –