我看到一些网站在URL中执行基于has的JavaScript函数。例如,如何执行一个基于URL哈希url的js函数#nameoffunction
,当我访问http://domain.com/jobs#test
那么网站执行基于函数#TEST
我可以通过检查location.href做到这一点,但有一个更好的办法?
我看到一些网站在URL中执行基于has的JavaScript函数。例如,如何执行一个基于URL哈希url的js函数#nameoffunction
,当我访问http://domain.com/jobs#test
那么网站执行基于函数#TEST
我可以通过检查location.href做到这一点,但有一个更好的办法?
这是我做的:
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
//正是我想要做的。谢谢!!! – Moon 2011-05-21 05:02:50
@Moon,没问题:-) – Neal 2011-05-22 20:19:50
你救了我的朋友(y) – NullPointer 2014-02-27 06:28:57
看看This。
请参阅属性表。
location.hash应该可以帮到你。
你可以使用像YUI库来做到这一点更优雅,看看YUI的浏览器历史记录管理器
$(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()
是危险的。你应该做一个预定义的安全功能数组,并调用这些。
把一个'eval'放在答案中,然后告诉不要使用它?尼斯:) – Mic 2011-05-20 20:04:38
如果没有需要支持旧的浏览器像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);
你问正确的问题朋友(y) – NullPointer 2014-02-27 06:29:29