jQuery将查询参数附加到当前哈希,省略重复项

时间:2015-02-16 19:57:28

标签: javascript jquery hash hashmap

我有一个像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,如果存在则跳过它。或者其他一些功能可能会有所帮助吗?

1 个答案:

答案 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;
    }
}

如果需要,您甚至可以通过将匹配项存储在对象中来更改其中一个键的当前值。

或者用这个正则表达式创建一个更动态的哈希检查器。