【发布时间】:2012-07-08 16:10:42
【问题描述】:
假设我的 html 是
<a href="#one">One</a>
<a href="#two">Two</a>
而Js是
$(window).on("hashchange"){
alert(document.location.hash);
}
我想得到散列改变之前的散列值。这可能吗?如果是,如何?
【问题讨论】:
标签: javascript jquery html hash
假设我的 html 是
<a href="#one">One</a>
<a href="#two">Two</a>
而Js是
$(window).on("hashchange"){
alert(document.location.hash);
}
我想得到散列改变之前的散列值。这可能吗?如果是,如何?
【问题讨论】:
标签: javascript jquery html hash
使用它
$(window).on("hashchange", function(e){
console.log(e.originalEvent.oldURL)
console.log(e.originalEvent.newURL)
});
【讨论】:
你必须跟踪最后一个哈希,例如:
var currentHash = function() {
return location.hash.replace(/^#/, '')
}
var last_hash
var hash = currentHash()
$(window).bind('hashchange', function(event){
last_hash = hash
hash = currentHash()
console.log('hash changed from ' + last_hash + ' to ' + hash)
});
【讨论】:
event.fragment 也未定义。不得不用location.hash.replace( /^#/, '' )替换它
实际上 Amit 提供的解决方案可以工作,但也可以使用 jquery 库和跨平台。
这是一个使用核心 javascript 和跨浏览器的更简化的解决方案。 (检查最新版本的 IE/FF/Chrome/Safari)
window.onhashchange = function(e){
console.log(e);
var oldURL = e.oldURL;
var newURL = e.newURL;
console.log("old url = " + oldURL);
console.log("new url = " + newURL);
var oldHash = oldURL.split("#")[1];
var newHash = newURL.split("#")[1];
console.log(oldHash);
console.log(newHash);
};
【讨论】:
window.location.hash,这似乎更可靠。
window.location.hash 和 window.onhashchange 用于两个完全不同的目的。 window.location.hash 只是为您提供哈希索引,但window.onhashchange 会在哈希索引更改时触发。上面的解决方案可以帮助您找出当前索引是什么以及在您的哈希更改之前过去的索引是什么。试着先了解一下场景,我的孩子。很高兴知道您的问题已解决。
不要使用
$(window).on("hashchange", function(e){
console.log(e.originalEvent.oldURL)
console.log(e.originalEvent.newURL)
});
它不能在 IE 上运行,可能在其他地方也行不通。
改用这个。
(function(w, $){
var UrlHashMonitor = {};
UrlHashMonitor.oldHash = '';
UrlHashMonitor.newHash = '';
UrlHashMonitor.oldHref = '';
UrlHashMonitor.newHref = '';
UrlHashMonitor.onHashChange = function(f){
$(window).on('hashchange', function(e){
UrlHashMonitor.oldHash = UrlHashMonitor.newHash;
UrlHashMonitor.newHash = w.location.hash;
UrlHashMonitor.oldHref = UrlHashMonitor.newHref;
UrlHashMonitor.newHref = w.location.href;
f(e);
});
};
UrlHashMonitor.init = function(){
UrlHashMonitor.oldHash = UrlHashMonitor.newHash = w.location.hash;
UrlHashMonitor.oldHref = UrlHashMonitor.newHref = w.location.href;
};
w.UrlHashMonitor = UrlHashMonitor;
return UrlHashMonitor;
})(window, window.jQuery);
/*
* USAGE EXAMPLE
*/
UrlHashMonitor.init();
UrlHashMonitor.onHashChange(function(){
console.log('oldHash: ' + UrlHashMonitor.oldHash);
console.log('newHash: ' + UrlHashMonitor.newHash);
console.log('oldHref: ' + UrlHashMonitor.oldHref);
console.log('newHref: ' + UrlHashMonitor.newHref);
//do other stuff
});
这应该适用于所有现代浏览器。
【讨论】: