我正在使用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注册这样的函数? 类似的东西存在吗?
谢谢!
答案 0 :(得分:4)
你可以有一个响应所有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";
我有一个工作演示 here (现在使用hashchange插件,请参阅第一条评论)。