javascript - 如何使用 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 中可以是退出页面中的任何文本。
解决方案
感谢您的提示。我已经尝试并能够替换一个 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 中进行测试,但在本地可以正常工作,如果你们可以进一步优化,那将是很大的帮助。
推荐阅读
- jquery - 如何在 Jquery daterangepicker 插件中自定义 html?
- javascript - Angular 6 和 PSQL 分页响应错误
- docker-compose - OCI 运行时执行失败:执行失败:container_linux.go:346:启动容器进程导致“exec:\”mysql\”:
- jquery - 制作一个搜索框来过滤文本及其实体
- java - 我们如何在 Liquibase XML changlelog 中使用 xinclude?
- c# - 除非第二级嵌套组件有事件,否则属性窗口不会显示第三级嵌套组件的事件
- java - 防止 android 应用程序克隆到 Samsung Secure 文件夹或其他此类性质的应用程序?
- mongodb - 从与 MongoDb 中的条件匹配的数组中的文档中提取值
- c# - 在 C# 或 JS 中列出的 XML 模式
- mysql - 为什么 GORM 不能生成外键?