在当前URL上附加一个参数

我想在项目现场的角落里放一个小复活节彩蛋按钮。 单击时,它只是将一个字符串放到当前URL上并重新加载页面。

所以,如果我在: http : //test.com/projects/view/134

单击该按钮

页面重新加载: http : //test.com/projects/view/134?ts = true

不知道我怎么会这样做。

试试这段代码,

var separator = (window.location.href.indexOf("?")===-1)?"?":"&"; window.location.href = window.location.href + separator + "ts=true"; 

编辑:为了避免重复参数或url中的非常大的字符串,您需要替换已存在的旧参数。

 var url=window.location.href, separator = (url.indexOf("?")===-1)?"?":"&", newParam=separator + "ts=true"; newUrl=url.replace(newParam,""); newUrl+=newParam; window.location.href =newUrl; 

您可以将location.href分配给它当前具有的值,以及新的查询字符串:

(编辑为对现有的查询字符串友好)

 $("#yourButtonId").click({ var loc = location.href; if (loc.indexOf("?") === -1) loc += "?"; else loc += "&"; location.href = loc + "ts=true"; }); 

或者更简洁:

 $("#yourButtonId").click({ var loc = location.href; loc += loc.indexOf("?") === -1 ? "?" : "&"; location.href = loc + "ts=true"; }); 
 location.href += '?ts=true'; 

就像那样。

我发现以前的答案缺乏,因此这里有一个更好地处理当前查询字符串中其他参数的方法

 appendToQueryString = function (param, val) { var queryString = window.location.search.replace("?", ""); var parameterListRaw = queryString == "" ? [] : queryString.split("&"); var parameterList = {}; for (var i = 0; i < parameterListRaw.length; i++) { var parameter = parameterListRaw[i].split("="); parameterList[parameter[0]] = parameter[1]; } parameterList[param] = val; var newQueryString = "?"; for (var item in parameterList) { if (parameterList.hasOwnProperty(item)) { newQueryString += item + "=" + parameterList[item] + "&"; } } newQueryString = newQueryString.replace(/&$/, ""); return location.origin + location.pathname + newQueryString; } 

您必须使用location.href = appendToQueryString(ts, true)来实际重新加载页面。

充分利用location DOM API,并计入哈希值:

 location.protocol + '//' + location.pathname + (location.search ? location.search + '&a=b' : '?a=b') + location.hash; 

使用:

例:

 var url = new URL("http://foo.bar/?x=1&y=2"); // If your expected result is "http://foo.bar/?x=1&y=2&x=42" url.searchParams.append('x', 42); // If your expected result is "http://foo.bar/?x=42&y=2" url.searchParams.set('x', 42); // Build result url.toString(); 

你的意思是:

$(document).ready(function() { $("#yourButtonId").click(function() { var currentUrl = window.location.pathname + "?ts=true"; }); });
$(document).ready(function() { $("#yourButtonId").click(function() { var currentUrl = window.location.pathname + "?ts=true"; }); }); 

如果要考虑URL中可能存在哈希“#”,请按以下步骤操作:

 var href = location.href; var hasQuery = href.indexOf("?") + 1; var hasHash = href.indexOf("#") + 1; var appendix = (hasQuery ? "&" : "?") + "ts=true"; location.href = hasHash ? href.replace("#", appendix + "#") : href + appendix; 

请参阅history API的文档:

https://developer.mozilla.org/en-US/docs/Web/API/History_API

用法示例:

var obj = { Title: title, Url: url }; history.pushState(obj, obj.Title, obj.Url);

来自@Bobbzorzen的改进回答,能够通过仅传递名称来删除param:

 function AlterQueryString(param, val) { var queryString = window.location.search.replace("?", ""); var parameterListRaw = queryString == "" ? [] : queryString.split("&"); var parameterList = {}; for (var i = 0; i < parameterListRaw.length; i++) { var parameter = parameterListRaw[i].split("="); if (typeof val != 'undefined') { parameterList[parameter[0]] = parameter[1]; } else if (param != parameter[0]) { parameterList[parameter[0]] = parameter[1]; } } if (typeof val != 'undefined') { parameterList[param] = val; } var newQueryString = Object.keys(parameterList).length > 0 ? "?" : ""; for (var item in parameterList) { if (parameterList.hasOwnProperty(item)) { newQueryString += item + "=" + parameterList[item] + "&"; } } newQueryString = newQueryString.replace(/&$/, ""); return location.origin + location.pathname + newQueryString; } 

要点:https://gist.github.com/envil/bc1832503bef55ffdabb0cde32bb06f1