如何使用jQuery在URL中将斜杠更改为哈希?

Ian*_*Ian 2 javascript jquery url-rewriting

我需要用URL中的哈希替换斜杠。其他一切保持不变。
例如

www.example.com/main/events/event-1  
Run Code Online (Sandbox Code Playgroud)

需要更改为:

www.example.com/main/events#event-1  
Run Code Online (Sandbox Code Playgroud)

(jQuery解决方案是最佳选择,插件可以)

根据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
  }
}
Run Code Online (Sandbox Code Playgroud)

该URL被更改了两次(因此www.example.com/main/events/event-1变为www.example.com/main/events#event-1,然后变为www.example.com/main#events#event-1)。

Dan*_*uis 5

不需要jQuery,Javascript具有本机字符串替换方法。

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

/\/([^\/]+)$/将匹配最后一个斜杠及其后的所有内容,直到字符串结尾。$1在第二个参数中,是对在模式中创建的组的后向引用(该组包含最后斜杠之后的所有内容)。试试看


更新:

我的猜测是您的outputStatus函数被多次调用,因此被替换多次。您可以通过首先检查#url中是否存在来避免这种情况:

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

String#indexOf 如果找到该值,将返回一个位置,否则返回-1。

或者(由于您似乎正在使用jQuery URL Parser,对吗?),可以$.url.attr('anchor')在修改url变量之前检查是否存在。