2017-08-21 2 views
0

次の関数は、URLの変数を置き換えるように設計されています。この関数を編集してURLパラメータが存在しない場合に設定する方法

これは動作しますが、URLに存在しない変数を渡すとURLに追加されます。

window.setUrlParameter = function(param, value) { 
    const regExp = new RegExp(param + "(.+?)(&|$)", "g"); 
    const newUrl = window.location.href.replace(regExp, param + "=" + value + "$2"); 
    window.history.pushState("", "", newUrl); 
} 

機能があります。置換するパラメータ名と設定する値が必要です。

前述したように、変数を置き換えるだけでなく、変数を設定することもできます。

ありがとうございます!

+0

$ 2は何ですか?ハードコーディングされた値ですか? – Rex

+0

@Rex - これは正規表現の "代用者"です – adeneo

答えて

0

ない場合、この関数はまたthis answerから修正正規表現を使用して、より速くする必要があり、それを追加することができます。

(矢印機能がちょうどES6の構文であるあなたもしたい場合は、あなたが通常の機能を使用することができます)

window.setUrlParameter = (param, value) => { 
    var url = window.location.href; 
    var hash = location.hash; 
    url = url.replace(hash, ''); 
    if (url.indexOf(param + "=") >= 0) 
    { 
     var prefix = url.substring(0, url.indexOf(param)); 
     var suffix = url.substring(url.indexOf(param)); 
     suffix = suffix.substring(suffix.indexOf("=") + 1); 
     suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : ""; 
     url = prefix + param + "=" + value + suffix; 
    } 
    else 
    { 
     if (url.indexOf("?") < 0) 
      url += "?" + param + "=" + value; 
     else 
      url += "&" + param + "=" + value; 
    } 
    window.history.pushState(null, null, url + hash); 
} 
0

あなたは正規表現を持って、あなただけの同じことのURLをテストし、それが

window.setUrlParameter = function(param, value) { 
    const regex = new RegExp(param + "(.+?)(&|$)", "g"); 
    const exist = regex.test(window.location.href); 

    let addQS = window.location.search.length > 0 : '&' : '?'; 
    let newUrl; 

    if (exist) { 
     newUrl = window.location.href.replace(regExp, param + "=" + value + "$2"); 
    } else { 
     newUrl = window.location.href + addQS + param + "=" + value; 
    } 

    window.history.pushState("", "", newUrl); 
} 
0

私は非常に正規表現でこれをクリーンアップをお勧めしたい、しかし、あなただけかどうかをチェックすることができますhrefが含まれ、ここで、パラメータ

window.setUrlParameter = function(param, value) { 
    const regExp = new RegExp(param + "(.+?)(&|$)", "g"); 
    let newUrl = window.location.href.replace(regExp, param + "=" + value + "$2"); 
    if (! window.location.href.includes(param)) 
     newUrl+='&'+param+'='+value 
    window.history.pushState("", "", newUrl); 
} 
0

誰もURLSearchParams APIを使用していないので、私は、私はあなたにその方法を示したいと思った:

function modifyLocation(param, value) 
{ 
    var qParams = window.location.search.split('?')[0]; 
    var urlParams = new URLSearchParams(qParams); 
    if(urlParams.has(param)){ 
    urlParams.delete(param); 
    } 
    urlParams.append(param, value); 
    return window.location.href.split('?')[0] + '?' + urlParams.toString(); 
} 

// To test on CodePen, I used editors = 4, because CodePen has that param 
var newUrl = modifyLocation('editors','4'); 
console.log(newUrl); 
// window.history.pushState("", "", newUrl); 
関連する問題