2011-02-13 99 views
0

我只用鏈接的一個實例工作,但我想合併我的代碼並重復使用鏈接的每個實例的相同片段。如何根據鏈接點擊動態更改哈希位置取得網址

目前我有工作:

$("nav a").live('click', function(){ 
     window.location.hash = '!/' + usr + '/' + $(this).attr("href").replace('.php', '/'); 
     origHash = $(this).attr("href"); 
     return false; 
    }); 
$("#files-left-pane a").live('click', function(){ 
     window.location.hash = '!/' + usr + '/files/' + $(this).attr("href").replace('.php', '/'); 
     origHash = $(this).attr("href"); 
     return false; 
    }); 
    $(window).bind('hashchange', function(){ 
      dump = window.location.hash; 
      newHash = window.location.hash.substring(3).replace(usr + '/', '').replace('/', '.php');//.replace('files/', ''); 
      //newHash = window.location.hash.replace(dump, origHash, 'g'); 
      console.log(newHash); 
      if (newHash) { 
       $wrap.find("#main-content").fadeOut(200, function() { 
        $wrap.load(newHash + " #main-content", function() { 
         $content.fadeIn(function() { 
          $wrap.animate({ 
           height: baseHeight + $content.height() + "px" 
          }, 500); 
         }); 
        }); 
       }); 
      } 
    }); 

現在,如果用戶點擊$(「導航一」),它將使window.location.hash這個樣子的

(在這個例子中,用戶點擊然後<a href="files.php">Files</a>) www.site.com/#!/s2xi/files/

的$(窗口).bind( 'hashchange')將哈希轉化爲

www.site.com/files.php

然後,如果用戶點擊位於files.php中的子菜單中的$(「#files-left-pane a」)。該window.location.hash看起來就像這樣:

(在這個例子中,用戶點擊<a href="buy.php">Buy</a>) www.site.com/#!/s2xi/files/buy/

的$(窗口) .bind(「hashchange」)應該然後散翻譯成

www.site.com/buy.php

回答

0

如果你想要的是把最後一個字,並添加「.PHP」,那是很容易 你有兩種方式,我認爲最簡單的是分裂(另一種是正則表達式)。

var splittedHash = window.location.hash.split("/") 
newHash = splittedHash[splittedHash.length - 2] + ".php"; 

應該很容易做到這一點。

順便說一句,正則表達式版本是:

newHash = window.location.hash.match(/[^\/]*\/$/)[0].replace("/","") + ".php" 
+0

正確的,但我也想從第二次點擊事件的URL刪除#/用戶/文件/添加.PHP頁面的名字! 。 – Eli 2011-02-13 04:21:26