这个方便的函数添加和修改 URL 中的键/值,是 posted由用户 Joshua Stewardson :
function updateQueryString(key, value) {
if (!uri) var uri = window.location.hash;
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
};
(我在原来的基础上稍作修改)。
它满足了我的需要,除了两件事:
一:我将其用于位置哈希。我有一个函数,可以一键向 URL 添加三个键值,但我不知道如何阻止它添加“?”哈希后,例如:
http://localhost/product-list?minify=false#?catId=2&prodId=3&subId=4
修改行
var separator = uri.indexOf('#') !== -1 ? "&" : "#"; // modified
解决“?”问题问题,但忽略第一个键值并在末尾再次添加它,例如
http://localhost/product-list?minify=false#?catId=1&prodId=2&subId=3&catId=2
二:我想修改该函数,以便在值为空 ('') 或 null 时删除该键,例如:
updateQueryString('catId','') || updateQueryString('catId',null)
我的正则表达式技能还不够敏锐。任何帮助表示赞赏。
谢谢。
部分答案
我回答了问题的第 1 部分。修改后的代码如下:
updateQueryString = function (key, value) {
if (!uri) var uri = window.location.hash;
var re = new RegExp("([#|&])" + key + "=.*?(&|$)", "i"); // added "or" and added hash
var separator = uri.indexOf('#') !== -1 ? "&" : "#"; // looks for hash in uri, not ampersand
if (uri.match(re)) {
return uri.replace(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
};
如果有人对如何删除传递空值或 null 值的哈希参数有建议,我会洗耳恭听。
最佳答案
关于javascript - JS 正则表达式 : modify updateQueryString function to handle hash and empty values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22123287/