WordPress+Divi页面:将当前URL参数注入按钮href的问题求助
搞定按钮href的参数传递问题!
看了你的代码,问题很明确:你已经能正确生成带参数的目标URL,但没有把这个URL赋值给按钮的href属性,而且代码还有重复定义、jQuery版本过老的小问题。下面给你修复后的完整方案:
修复后的代码(直接可用)
// 仅定义一次参数获取函数 function getParameterByName(name, url = window.location.href) { name = name.replace(/[\[\]]/g, '\\$&'); var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } // 获取需要的参数值 var f_value = getParameterByName('f'); var l_value = getParameterByName('l'); var e_value = getParameterByName('e'); var ph_value = getParameterByName('ph'); var id_value = getParameterByName('id'); // 等待DOM加载完成后操作按钮(Divi页面必须加这个,确保按钮已渲染) jQuery(document).ready(function($) { // 构建目标URL const myUrlWithParams = new URL("https://website.com/new-url/"); // 只添加存在的参数,避免空值参数 if(f_value) myUrlWithParams.searchParams.append("f", f_value); if(l_value) myUrlWithParams.searchParams.append("l", l_value); if(e_value) myUrlWithParams.searchParams.append("e", e_value); if(ph_value) myUrlWithParams.searchParams.append("ph", ph_value); if(id_value) myUrlWithParams.searchParams.append("id", id_value); // 核心操作:把生成的URL赋值给按钮的href! $("#js-caller").attr("href", myUrlWithParams.href); // 可选:点击时调试用(不需要可以删掉) $( "#js-caller" ).on( "click", function( event ){ console.log("当前按钮链接:", $(this).attr("href")); // 如果你想阻止默认跳转就保留这行,否则删掉 // event.preventDefault(); }); });
为什么你的原代码没生效?
- 重复代码冗余:你写了两遍相同的函数和变量,虽然不会报错,但完全没必要,还可能导致变量覆盖
- 没设置href:你只是在点击时生成了URL,但没把它赋值给按钮的
href属性,所以按钮还是用原来的链接 - jQuery版本太老:你引入的1.2.3版本太老旧,Divi自带的jQuery版本比这个新很多,同时引入会有兼容性冲突,直接用Divi自带的就行
更简洁的批量参数复制方案(推荐)
如果以后要加更多参数,一个个写append太麻烦,用这个批量处理的方式:
jQuery(document).ready(function($) { const currentUrl = new URL(window.location.href); const newUrl = new URL("https://website.com/new-url/"); // 列出你要复制的参数名 const paramsToCopy = ['f', 'l', 'e', 'ph', 'id']; paramsToCopy.forEach(param => { const value = currentUrl.searchParams.get(param); if(value) newUrl.searchParams.set(param, value); }); $("#js-caller").attr("href", newUrl.href); });
以后要加参数,只需要在paramsToCopy数组里加个参数名就行,非常方便。
内容的提问来源于stack exchange,提问作者Thommen
相关产品推荐
相关产品推荐

