如何使用jQuery根据哈希值触发不同的哈希函数

How to trigger different functions on hash change based on hash value with jQuery?

本文关键字:哈希 函数 jQuery 何使用 哈希值      更新时间:2023-09-26

我正在使用Ben Alman的jQuery hashChange事件插件。散列部分如下所示:

#x=1&y=2&z=3

我已经有了解析它的函数getHashPart(key)setHashPart(key)

我想要一个函数,它只允许注册哈希的特定部分的更改。我会这样使用它(我想…):

$(window).hashchange('x',function(new_value_of_x) {do something x related;});
$(window).hashchange('y',function(new_value_of_y) {do something y related;});

如何在jQuery中注册这样的函数?是否存在类似的情况?

谢谢!

您可以有一个函数来响应所有的hashchange事件(最好保持hashchange插件的使用),然后重定向到如下的单独处理程序:

var hashParameters = {};
$(window).bind("hashchange",function(event) {
//if you're using the awesome hashchange plugin
//$(window).hashchange(function(event) { ...
    var newParameters = getParameters(event.target.location.hash.substring(1));
    $.each(newParameters, function(key, value) {
       if(hashParameters[key] !== value) $(window).trigger(key + "-change");
       hashParameters[key] = value;
    });
});
$(window).bind("andsome-change", function() {
    alert("hi!");
});
function getParameters(paramString) {
    //taken from http://stackoverflow.com/questions/4197591/parsing-url-hash-fragment-identifier-with-javascript/4198132#4198132
    var params = {};
    var e, a = /'+/g, r = /([^&;=]+)=?([^&;]*)/g,
        d = function (s) { return decodeURIComponent(s.replace(a, " ")); };
    while (e = r.exec(paramString))
       params[d(e[1])] = d(e[2]);
    return params;
}
window.location.hash = "some=value&andsome=othervalue";

我在这里有一个工作演示(现在有了hashchange插件,请参阅第一条评论)。