2010-08-26 36 views
2

我需要用URL中的散列代替斜線。其他一切都保持不變。
如:
這樣的:如何將斜槓更改爲帶有jQuery的URL中的散列?

www.example.com/main/events/event-1 

需要改變這樣:

www.example.com/main/events#event-1 

(jQuery的解決方案是最佳的,插件OK)基於OP的評論

更新:

使用此代碼:

function outputStatus(e) 
{ 
    if (e.success && $.url.segment(1) == 'events') 
    { 
    // IF Flash SWF loads success AND on events page 
    var url = $.url.attr('source'); // gets current URL 
    var new_url = url.replace(/\/([^\/]+)$/, "#$1"); // replaces last slash with a hash 
    window.location = new_url; // sets the current URL to the new URL 
    } 
} 

的URL得到改變兩次(所以www.example.com/main/events/event-1變得www.example.com/main/events#event-1然後www.example.com/main#events#event-1)。

回答

4

不需要jQuery,Javascript有本地字符串替換方法。

var url = "www.example.com/main/events/event-1" 
var new_url = url.replace(/\/([^\/]+)$/, "#$1"); 
alert(new_url); 

/\/([^\/]+)$/將匹配最後的斜槓和它後面的所有內容,直到字符串結束。 $1在第二個參數中是一個backreference到模式中創建的組(其中包含最後一個斜槓後的所有內容)。 Try it out


更新:

我的猜測是,你outputStatus函數被調用多次,從而取代多次。您可以通過先爲#的存在在你的URL檢查避免這種情況:如果該值被發現

if (url.indexOf('#') == -1) // # is not found 
{ 
    var new_url = url.replace(/\/([^\/]+)$/, "#$1"); 
} 

String#indexOf會返回一個位置,-1,如果沒有。

或者(因爲您好像使用的是jQuery URL Parser,是嗎?),您可以在修改url變量之前檢查是否存在$.url.attr('anchor')

+0

這個工作,但它完成了2倍。 using window.location = new_url; URL首先更改爲: www.example.com/main/events#event-1 再到: www.example.com/main#events#event-1(2個哈希) 剛需它完成了1X。 – Ezn 2010-08-26 20:54:55

+0

[代碼] \t \t功能outputStatus(E){ \t \t \t如果(e.success && $ .URL。segment(1)=='events'){//如果Flash SWF加載成功並且處於事件頁面 \t \t \t \t var url = $ .url.attr('source'); \t //獲取當前URL \t \t \t \t \t var new_url = url.replace(/ \ /([^ \ /] +)$ /,「#$ 1」); \t //用散列代替最後一個斜槓 \t \t \t \t \t window.location = new_url; \t //設置當前URL到新的URL \t \t \t} \t \t} [/代碼] – Ezn 2010-08-26 20:58:43

+0

(抱歉換行符,或缺乏) – Ezn 2010-08-26 20:59:34

1

試試這個:

var str = "www.example.com/main/events/event-1"; 

var idx = str.lastIndexOf('/'); 

var res = str.substr(0,idx) + '#' + str.substr(idx + 1); 

或本:

var str = "www.example.com/main/events/event-1" 

var res = str.replace(/\/([^/]+)$/,'#$1'); 
相關問題