我看到一些网站在URL中执行基于has的JavaScript函数。例如,
当我访问http://domain.com/jobs#test
时然后网站执行基于#test
的功能我可以通过检查location.href来做到这一点,但有更好的方法吗?
答案 0 :(得分:10)
这就是我的所作所为:
window.onload = function(){
var hash = (window.location.hash).replace('#', '');
if (hash.length == 0) {
//no hash do something
}
else {
//else do something with hash
}
}
演示:http://jsfiddle.net/maniator/XCjpy/show/#test
demo2:http://jsfiddle.net/maniator/XCjpy/show/
demo3:http://jsfiddle.net/maniator/XCjpy/show/#testing_again
答案 1 :(得分:3)
如果您不需要支持IE6和IE7等旧版浏览器,可以使用:
window.onhashchange = function(){
switch(location.hash) {
case '#hash1':
//do something
break;
case '#has2':
//do something else
break;
}
}
但是如果您必须支持旧浏览器,则需要进行轮询:
var oldHash = location.hash;
setInterval(function(){
if(location.hash !== oldHash){
oldHash = location.hash;
//hash changed do something
}
}, 120);
答案 2 :(得分:2)
<强> Live Demo 强>
$(window).bind('hashchange', function() {
var hash = document.location.hash;
var func = hash.replace('#', '');
eval(func + '()');
});
function asdf() {
alert('asdf function');
}
function qwerty() {
alert('qwerty function');
}
注意: eval()
很危险。您应制作预定义的安全功能数组,并调用它们。
答案 3 :(得分:1)
看看This。
请参阅物业表
location.hash应该帮助你。
答案 4 :(得分:0)
您可以使用像YUI这样的库来更优雅地执行此操作,请查看YUI浏览器历史记录管理器