如何使用jQuery根据当前URL更新内部链接参数?

时间:2018-08-03 12:43:52

标签: javascript jquery

如果来自特定URL的某些访问,我们如何更新页面的内部链接。

例如。

某些用户来自Facebook,URL为

https://www.example.com/?utm_source=facebook&utm_medium=cpc&utm_campaign=mobile

并且我想更新我所有的特定链接以基于URL进行更新,如果是

原始网址

https://www.example.com/cat/i?pid=ABCD&affid=aff1&affExtParam1=para1&affExtParam2=para2

用户从Facebook链接访问后的更新URL

https://www.example.com/cat/i?pid=ABCD&affid=aff1&affExtParam1=facebook&affExtParam2=mobile

即使它可以编辑URL中的一个参数也很有用。

注意: 在param1和param2中,可以是退出页面中的任何文本。

1 个答案:

答案 0 :(得分:0)

感谢您的提示。我已经尝试过并且能够替换一个URL参数。下面是代码。

来自不同答案的组合脚本,并使用以下代码。

 function updateQueryStringParameter(uri, key, value) {
  var re = new RegExp("([?&])" + key + "=.*?(&|#|$)", "i");
  if( value === undefined ) {
    if (uri.match(re)) {
        return uri.replace(re, '$1$2');
    } else {
        return uri;
    }
  } else {
    if (uri.match(re)) {
        return uri.replace(re, '$1' + key + "=" + value + '$2');
    } else {
    var hash =  '';
    if( uri.indexOf('#') !== -1 ){
        hash = uri.replace(/.*#/, '#');
        uri = uri.replace(/#.*/, '');
    }
    var separator = uri.indexOf('?') !== -1 ? "&" : "?";    
    return uri + separator + key + "=" + value + hash;
  }
  }  
}
  $.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null){
       return null;
    }
    else{
       return decodeURI(results[1]) || 0;
    }
}
    var key = "affExtParam2";
    var value = $.urlParam('utm_source'); 
  $('a').each(function(){
    var uri = $(this).attr("href");
  $(this).attr("href" , updateQueryStringParameter( uri, key, value ));
}); 

如果您可以进一步优化,则无法在JS小提琴中进行测试,但可以在本地正常工作,这将是很大的帮助。