我有一个像http://example.com/#var1=1
这样的网址
我正在使用此函数向哈希添加新的查询参数:
function appendHash(name, val){
var currentHash = location.hash;
if(!currentHash){
location.hash = '#'+name+'='+val;
}else{
location.hash = currentHash+'&'+name+'='+val;
}
};
但是,如果当前哈希中已经存在新的name=val
,那么这将不会起作用,例如,如果当前哈希是#var1=1&var2=2
并且我添加var2=2
它将会再次附加,我不希望这种情况发生。
我需要的是检查url中是否已存在新名称和val,如果存在则跳过它。或者其他一些功能可能会有所帮助吗?
答案 0 :(得分:0)
你可以使用一些正则表达式:
function appendHash (name, val) {
var currentHash = location.hash;
var regex = /(?:[#&])([^=]+)=([^&]+)/g;
var found = false;
st.replace(regex, function (part, key, value) {
if (key === name && value === val) {
found = true;
}
});
if (!currentHash) {
location.hash = '#' + name + '=' + val;
} else if (!found) {
location.hash = currentHash+'&'+name+'='+val;
}
}
如果需要,您甚至可以通过将匹配项存储在对象中来更改其中一个键的当前值。
或者用这个正则表达式创建一个更动态的哈希检查器。