這個方便的功能增加,並在URL修改鍵/值,是posted用戶Joshua Stewardson:JS正則表達式:修改updateQueryString函數來處理哈希和空值
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;
}
};
如果任何人有一個關於如何如果傳遞一個空或空值刪除散列參數的建議,我所有的耳朵。
您可以發佈一個點擊時向網址添加三個鍵值的功能嗎? – fiction
我只是在父函數中調用了三次函數。 – dylanmac