2011-11-01 41 views
1

我目前正在基于jQuery和hashChanged建立一个动态网站。 目前我使用的document.ready此代码:jQuery哈希更改通配符

$(window).hashchange(function(){ 
    switch(location.hash) 
    { 
    case "#/calendar": 
     content.load("calendar.php"); 
     break; 
    case "#/media": 
     content.load("media.php"); 
     break; 
    case "#/social": 
     content.load("social.php"); 
     break; 
    case "#/settings": 
     content.load("settings.php"); 
     break; 
    default: 
     content.load("home.php"); 
     title.text("Debafla"); 
    } 
}); 

现在我建立一个视频galery,所以我想用的URL这样的:

example.com/#/video/12485 

所以video.php需要被加载到内容分区我需要从数据库中获取ID为12485的视频。但我怎样才能在JavaScript中覆盖这些哈希页?

谢谢!

回答

2

我会用分割法:

$(window).hashchange(function(){ 
    switch(location.hash.split("/")[1]) 
    { 
    case "calendar": 
     content.load("calendar.php"); 
     break; 
    case "media": 
     content.load("media.php"); 
     break; 
    case "social": 
     content.load("social.php"); 
     break; 
    case "settings": 
     content.load("settings.php"); 
     break; 
    case "video": 
     content.load("video.php?v=" + location.hash.split("/")[2]); 
     break; 
    default: 
     content.load("home.php"); 
     title.text("Debafla"); 
    } 
}); 
+0

如此简单,但非常有效,也似乎为最佳解决方案未来 – user1013338

+0

是的,只要保留'#/关键字/数据'格式,它就应该适用于将来的需求。 :) –

2

添加额外的if-else条件,采用以下模式:

$(window).hashchange(function(){ 
    if (/^#\/video\/\d+$/.test(location.hash)) { //hash equals #/video/numbers ? 
     var num = location.hash.match(/\d+/)[0]; //12485, for example 
     //do something, for example: 
     content.load("video.php?video_id=" + num); 

    } else {//Else switch: 
     switch(location.hash) 
     { 
    ...