2014-03-02 17 views
0

這個方便的功能增加,並在URL修改鍵/值,是posted用戶Joshua StewardsonJS正則表達式:修改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; 
    } 
}; 

如果任何人有一個關於如何如果傳遞一個空或空值刪除散列參數的建議,我所有的耳朵。

+0

您可以發佈一個點擊時向網址添加三個鍵值的功能嗎? – fiction

+0

我只是在父函數中調用了三次函數。 – dylanmac

回答

2

而不是嚴重試圖重新發明輪子我強烈建議你保持簡單並使用庫。看看URI.jsjsUrl

+0

我明白你的觀點。不幸的是,URI.js(使用散列操作附加組件)非常大。 jsurl很小,但迫使我檢查空值,然後調用delete方法。不是世界末日,但在這方面不比我現在擁有的更好。 – dylanmac

+0

越多我探索替代品,我越喜歡這個功能,因爲它是不完美的。 – dylanmac