如何用JavaScript或jQuery替换链接中?redirect=后的内容为当前URL
如何用JavaScript替换链接中?redirect=后的内容为当前页面URL
直接给你可运行的解决方案,步骤清晰,避免正则容易踩的坑:
核心代码
// 监听DOM加载完成,确保能找到页面上的链接 document.addEventListener('DOMContentLoaded', () => { // 获取当前页面完整URL(含参数、哈希) const currentUrl = window.location.href; // 编码URL,避免特殊字符破坏参数结构 const encodedUrl = encodeURIComponent(currentUrl); // 选中所有带?redirect=的链接(可根据需求修改选择器,比如加类名) const targetLinks = document.querySelectorAll('a[href*="?redirect="]'); targetLinks.forEach(link => { // 用URL对象解析链接,更可靠地修改参数 const linkUrl = new URL(link.href); // 替换redirect参数的值为编码后的当前URL linkUrl.searchParams.set('redirect', encodedUrl); // 更新链接的href属性 link.href = linkUrl.toString(); }); });
为什么这么写?
- 获取当前URL:
window.location.href直接拿到浏览器地址栏的完整内容,不用自己拼接协议、域名这些。 - 编码URL:
encodeURIComponent会把URL里的?、&、=等特殊字符转义,避免这些字符把redirect参数拆成多个,导致服务器解析出错。 - 选中目标链接:用
querySelectorAll精准定位所有包含?redirect=的链接,如果你的链接有专属类名(比如class="app-redirect-link"),可以改成document.querySelectorAll('a.app-redirect-link'),效率更高。 - 用URL对象修改参数:比起手动写正则替换,
URL对象是浏览器原生支持的工具,能自动处理参数的增删改,不会出现正则匹配不全(比如链接里有多个参数时)的问题。
示例效果
原链接:
<a href="https://app.example.com/?redirect=www.example.com">Link</a>
当前页面URL为https://www.example.com/game?q=123时,运行代码后链接会变成:
<a href="https://app.example.com/?redirect=https%3A%2F%2Fwww.example.com%2Fgame%3Fq%3D123">Link</a>
(注:编码后的URL服务器端会自动解码,不影响跳转)
额外注意
如果是React、Vue这类单页应用,页面URL切换不会刷新页面,需要在路由切换的钩子函数里重新执行这段代码,保证链接始终同步当前URL。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

