首页 > 解决方案 > 如何使用 jQuery 根据当前 URL 更新内部链接参数?

问题描述

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

例如。

一些用户来自 Facebook,URL 是

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

我想更新我所有的特定链接以根据 URL 进行更新,如果是 facebook

原始网址

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 中可以是退出页面中的任何文本。

标签: javascriptjquery

解决方案


感谢您的提示。我已经尝试并能够替换一个 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 fiddle 中进行测试,但在本地可以正常工作,如果你们可以进一步优化,那将是很大的帮助。


推荐阅读