0

パラメータ値を更新した後、ページの場所をリロードする必要があります。パラメータが常に特定の順序である場合は難しくありませんが、そうではありません。

したがって、設定されたパターンがあれば、正規表現一致を介してそれらをターゲットにすることができます。たとえば、URL の場合: http://www.example.html?sf_id=15040&15041.survey=form&variation=25002_1

私は次のようにそれをターゲットにしていました:

window.location.replace( window.location.href.replace( sf_id=\d+&\d+\.survey=form&variation=, 'sf_id=460&460.survey=form&variation=25002_2' ) );

しかし、現在、param の出現はランダムであるため、これらはすべて有効な URL です。

http://www.example.html?15041.survey=form&sf_id=15040&variation=25002_1
http://www.example.html?variation=25002_1&sf_id=15040&15041.survey=form
http://www.example.html?param1=value1&variation=25002_1&sf_id=15040&param2=value2&15041.survey=form

if/else if ステートメントをまだ正しくできることはわかっていますが、特定のパターンがないため、それが正しい方法だとは思いません。

どんな助けでも大歓迎です!ありがとうございました。

4

2 に答える 2

0

この SO answerに基づいて、次のコードを使用してすべてのクエリ パラメータの配列をフェッチします。

var qs = (function(a) {
    if (a == "") return {};
    var b = {};
    for (var i = 0; i < a.length; ++i)
    {
        var p=a[i].split('=', 2);
        if (p.length == 1)
            b[p[0]] = "";
        else
            b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
    }
    return b;
})(window.location.search.substr(1).split('&'));

更新
上記の関数は連想配列を返すため、.join()以前に回答したように使用できません。代わりに、キーをループして新しいクエリ文字列を再構築する必要があります。パラメータ キーを置き換える関数も含めました。その部分は考えすぎかもしれません。

function replaceParamKey(qsObj, oldKey, newKey) {
    qsObj[newKey] = qsObj[oldKey];
    delete qsObj[oldKey];
}

function constructQueryString(qsObj) {
    var qsString = "?",
        c = 0;
    for (var param in qsObj) {
        if (c) qsString += "&";
        qsString += encodeURIComponent(param);
        if (qsObj[param] !== "") qsString += ("=" + encodeURIComponent(qsObj[param]));
        c++;
    }

    return qsString;
}

console.info(qs); // Object {15041.survey: "form", sf_id: 15040, variation: "25002_1"}
replaceParamKey(qs, "15041.survey", "460.survey");
console.info(constructQueryString(qs)); // ?sf_id=15040&variation=25002_1&460.survey=form
于 2014-11-04T20:36:38.213 に答える
0

この答えがトラックにつながるかどうかを確認してください。その後、さまざまなオブジェクト間の比較を実行して、それらが一致しているかどうかを確認できます。

于 2014-11-04T20:37:10.787 に答える