如何获取URL全部参数并追加到指定href,且排除s参数的JS实现问题
解决方法
你可以通过删除参数对象中的s字段实现过滤需求,核心修改点如下:
- 解析当前页面URL的查询参数后,直接删除
s键,避免该参数被合并到最终的href中 - 若需要同时过滤a标签本身自带的
s参数,可在参数合并完成后再统一删除一次s键,避免遗漏
修改后完整代码
$(document).ready(function() { function querystringToDict(querystring){ if (querystring.length === 0) { return {}; } let queryDict = {} querystring.split("&").forEach(function(item) { queryDict[item.split("=")[0]] = item.split("=")[1] }); return queryDict; } var queryDict = querystringToDict(location.search.substr(1)); // 新增:删除当前URL中的s参数 delete queryDict['s']; var queryHref, queryFinal = {}; var lctSearch = location.search; $('html a').each(function() { // if the href contains www.test.com insert params if ($(this).prop('href').includes('www.test.com')){ if(lctSearch != ''){ param = $(this).attr('href').split('?')[1] === undefined ? '' : $(this).attr('href').split('?')[1]; queryHref = querystringToDict(param); queryFinal = Object.assign({}, queryHref, queryDict); // 可选新增:同时删除a标签本身携带的s参数 delete queryFinal['s']; paramFinal = Object.keys(queryFinal).map(key => key + '=' + queryFinal[key]).join('&'); // 优化:如果没有参数就不加问号,避免出现xxx.com/?的情况 let newHref = $(this).attr('href').split('?')[0]; if(paramFinal) { newHref += '?' + paramFinal; } $(this).attr('href', newHref); } } }); });
补充说明
以上修改除了实现过滤s参数的需求外,还额外优化了空参数场景的展示,避免没有参数时href末尾多出多余的问号,你可以根据实际需求选择是否保留该优化逻辑。
内容的提问来源于stack exchange,提问作者claudio romano
相关产品推荐
相关产品推荐

