2

これについてはたくさんの質問があることは知っていますが、必要なものが正確に見つかりませんでした

これは私が持っているjsです

$j('.showCategory li a').each(function() {
    var catId = $j(this).attr("data-id");
    this.href += (/\?/.test(this.href) ? '&' : '?') + 'filter_category='+ catId;
});

これは、必要なパラメータを使用してURLを生成するため、うまく機能します。問題は、複数回クリックすると(このフィルターはすべてのページで使用可能です)、同じパラメーターが何度も追加され、次のようなURLが生成されることです。

http://www.blabla.com/search?search=cat&filter_duration=short&filter_duration=medium&filter_duration=long

次のような条件を追加して修正してみました

$j('.showCategory li a').each(function() {
    if(this.href.indexOf('filter_category') == -1) {
        var catId = $j(this).attr("data-id");
        this.href += (/\?/.test(this.href) ? '&' : '?') + 'filter_category='+ catId;
    } else {
        ????
    }
});

ただし、その場合、パラメーターは追加されませんが、値は置き換えられません。どうすればこれを解決できますか?

4

1 に答える 1

2

このパターンを使用して、正規表現でインプレース置換を実行します。

} else {
this.href = this.href.replace(/filter_duration=(.+?)(&|$.*)()/, "filter_duration=" + catId + "$2"
}

これは、キャプチャグループを使用して、既存のfilter_duration要素のクエリパラメータを検索し、既存の値を新しい値(この場合はcatId)に置き換えます。これは、文字列の最後のクエリパラメータであるかどうかに関係なく機能するはずです。

そうは言っても、私はこのソリューションを最適とは見なしません。URLに必要な値をクライアント側のjavascriptオブジェクトに保存し、誰かが変更するたびにURLを最初から再構築する方がよいでしょう。カテゴリー。そうすれば、交換で問題が発生し、クライアントが悪い状態になるというテストケースを心配する必要がなくなります。

于 2013-02-25T17:41:07.177 に答える